lunes, julio 09, 2012

Obtener un numero único en javascript

En javascript tenemos la opción de utilizar el método getTime() del objeto Date para obtener un numero unico. El método getTime() lo que devuelve es el número de milisegundos que han pasado desde 1 de Enero de 1970. Que es la forma que muchos lenguajes de programación utilizan para calcular una fecha.

De esta manera el número devuelto por getTime() nunca se repetirá ya que las fechas nunca se repiten, a menos que la función se invocada dos veces exactamente en el mismo milisegundo, lo cual ciertamente no es imposible dada la velocidad de los ordenadores actuales, por lo que si quieres generar un numero único en una aplicación que la usen varios usuarios simultáneamente, tal vez esto no sea una buena idea.

Por ejemplo, en mi computadora, si ejecuto el codigo siguiente:
<script type="text/javascript">
function unico(){
 for(var i = 0; i < 1000; i++) {
  document.write(i + " = " + new Date().getTime() + "
");
 }
}
</script>
Veo la función se ejecuta entre 1 y 50 veces antes de cambiar de numero, dependiendo del milisegundo exacto en que empezó la ejecución de la función. Pero podemos hacer lo siguiente para perfeccionar un poco la función. Y es que podemos ajustarla para que se ejecute una vez cada cada 100 milisegundos.
<script type="text/javascript">
a = new Array();

function unico(){
 a.push(new Date().getTime());
 if(a.length > 100){
  clearInterval(id);
  imprimir();
 }
}

function imprimir(){
 for(var i = 0; i < a.length; i++){
  document.write(i +" = " + a[i] + "
")
 }
 
 for(var i = 0; i < a.length; i++){
  if(a[i] == a[++i]){
   alert('hay problema');
  }
  
 }
 
}
</script>

Y desde el body del html ejecutamos la función de la siguiente manera: 
<script type="text/javascript">
id = setInterval(unico, 100);
</script>


Pruébalo:
Nota: El código está en la pestaña HTML.
Cuando presiones el botón de play (Run Again) o la pestaña Result, debes esperar un poco ya que la función está programada para ejecutarse a los 100 milisegundos.



2 comentarios:

  1. es bueno tu blog compadre
    saludos

    ResponderEliminar
  2. GChris: Te felicito muy buen trabajo, me has despejado una duda, gracias y sigue adelante

    ResponderEliminar

¿Qué opinas?