Este sistema es muy similar a tinyurl por lo tanto hay dos tipos de hashses, uno generado por el sistema y uno personalizado opcional.
La idea que tube es que primero comienze el id del enlace con 0,1,2,3,4,5... despues 7,8,9,a,b,c,d,e... despues mayusculas ...x,y,z,A,B,C... y cuando llegue a Z comenzar otraves.. X,Y,Z,01,02,03,04,05... despues 0X,0Y,0Z,10,11,12,13,14... 1x,1y,1z,1A,1B...
se entiende? xD
De esta forma generaría hashses que contengan números y letras mayusculas y minúsculas abarcando todas las combinaciones posibles y así hacer hashses de uno, dos, tres carácteres sin tener colisiones.
Para esto habia hecho un pseudocódigo donde..
Código
function calcula_alias(){ sql: obtiene el aliaz mas corto y el último alfabético con límite 1 verifica desde el ultimo caracter hasta el primero del 0 al 9 , de la a a la z y de la A a la Z si es Z revisa el siguiente si llega al final agregar uno y resetear todos a 0 }
de esta forma lograría hacer el autoincrementado pero el problema es que el usuario puede ingresar su hash personalizado, por lo tanto digamos que alguien ingresa "ZZZ" como de dormir y cuando llegue el hash a tres carácteres se va a seleccionar ese porque será el ultimo de la tabla y me va a joder todas las demás combinaciones entre 000 y ZZZ, ahora, tampoco puedo tomar el primero porque si tomo el aaa quien me dice que no hay un aab.
Se entiende mi rompecabezas? xDD el sistema está muy muy útil ya que solucionaría el problema que ningún hosting de archivos ha podido solucionar, ni si quiera facebook ya que ellos utilizan un hash correspondiente a muchas cosas para evitar colisiones, imageshack, megaupload, tinyurl, etc , a todos les solucionaría la vida con este sistema xD pero aún se me está haciendo un poco complicado.
También pensé que si el hash se repite entonces anteponer un hash aleatorio de 5 carácteres pero no es la idea.
Conversando con nakp, si no me resulta lo que haré es utilizar el id numérico y sacar el max() del id y verificar si existe en la columna de los hashses , solo que como será un string se me hará un poco complejo la verificación, pero es posible.
¿Alguien tiene alguna idea para que me de una mano?
Mientras tanto me conformé con un hash de 5 carácteres con algunos símbolos para evitar una colisión
Código
function calcula_alias($cantidad = 5){ $caracteres = '=-_{}$;,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; for($cuenta = 0; $cuenta <= $cantidad; $cuenta++){ } return $hash; }