Although is an old question I eventually found the solution long ago. Next the script so anyone can use it. As seed you should pass a dynamic or random value which you may pass to the shader as an attribute.
float getNoise(vec2 seed)
{
vec2 theta_factor_a = vec2(0.9898, 0.233);
vec2 theta_factor_b = vec2(12.0, 78.0);
float theta_a = dot(seed.xy, theta_factor_a);
float theta_b = dot(seed.xy, theta_factor_b);
float theta_c = dot(seed.yx, theta_factor_a);
float theta_d = dot(seed.yx, theta_factor_b);
float value = cos(theta_a) * sin(theta_b) + sin(theta_c) * cos(theta_d);
float temp = mod(197.0 * value, 1.0) + value;
float part_a = mod(220.0 * temp, 1.0) + temp;
float part_b = value * 0.5453;
float part_c = cos(theta_a + theta_b) * 0.43758;
return fract(part_a + part_b + part_c);
}