Experimentando la vida
Generador de ID continuas al estilo URL corta
Bueno…. si… es bueno para matar al Alzheimer
Bajo la duda de un amigo acerca de como generar numeros de ID cortos para utilizar en un servicio acortador de url’s se me ocurrio utilizar letras mayusculas y minusculas para aumentar la cantidad de posibles valores en una posicion de la cadena, ya que los numeros solo permitian 10 posibilidades (0-9) y la cadena se alargaria rapidamente.
De esta manera puedo generar cadenas al estilo “a1D2″, y producir su valor consecutivo, que quedaria asi “a1D3″, asi hasta llegar al “a1D9″ y luego comenzar con “a1DA”, asi hasta terminar las mayusculas, y minusculas. Una vez sucedido esto, el movimiento es similar al de un cuenta kilometros. y el valor quedaria asi “a1F0″ y podriamos seguir!..
Ahora bien, la funcion puede generar el siguiente id, partiendo desde cualquier anterior!..
Por ejemplo, si le ingresaramos el ID “0″ nos devolveria 1 y si ingresaramos el id “0000″ nos devolveria 0001, tambien si pusieramos “ABCD” nos devolveria “ABCE”.
La declaración de la funcion es la siguiente.
/** * Genera la cadena siguiente a una cadena de caracteres alphanumericos no simbolicos ingresada * * @author Cristián Pérez * @param string $current * @return string * */ function getNextKey($current) { $chars = array(); for($i = 0; $i < strlen($current); $i++) { $chars[$i] = ord(substr($current, $i, 1)); } $ci = count($chars) - 1; for($i = $ci;;$i--) { if(($chars[$i] >= 48 && $chars[$i] < 57) || (($chars[$i] >= 65 && $chars[$i] < 90) xor ($chars[$i] >= 97 && $chars[$i] < 122))) { ++$chars[$i]; break; } if($chars[$i] == 57) { $chars[$i] = 65; break; } elseif($chars[$i] == 90) { $chars[$i] = 97; break; } if($i == 0) { if($chars[$i] == 122) { foreach($chars as &$char) { $char = 48; } $chars[count($chars)] = 48; } break; } else { $chars[$i] = 48; } } foreach($chars as &$char) { $char = chr($char); } return implode('', $chars); }
Un ejemplo practico para que entiendan como funciona es el siguiente, el cual pueden copiar y pegar en un archivo nuevo para que lo prueben.
$form = '<form action="" method="post">'; $form .= '<input type="text" name="currentID" value="%s" />'; $form .= '<input type="submit" value="Siguiente ID" />'; $form .= '</form>'; if ($_POST) { printf($form, getNextKey($_POST['currentID'])); } else { printf($form, '0'); }
Bugs, preguntas, sugerencias, lo que sea es aceptado!.
Espero que les sirva!
Saludos!!
| Imprimir artículo | Este artículo fue publicado por Cristián el 23 marzo 2010 a las 0:21, y está archivado en Recursos, php. Sigue las respuestas a esta entrada a través de RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio. |
hace 3 semanas
HOla gracias por el aporte me sirvio mucho … Saludos…::