your - Nombres de URL aleatorios PHP(URL corto)
your short url (5)
Después de usar sitios como JSFiddle, noté que generan automáticamente una URL aleatoria y única formada por varios caracteres en mayúscula y minúscula.
Podríamos beneficiarnos de esto para nuestras páginas de reserva. ¿Cómo se hace?
Algo en esta línea:
<?php
$url_length = rand(10,20); //generate a random number between 10 and 20 for the length of the URL
$url = array($url_length);
for($i=0; $i < $url_length; $i++)
{
$char = 0;
while($char < 65 OR $char > 122 OR ($char > 91 AND $char < 97))
{
$char = rand(65,122);
}
$url[] = chr($char);
}
print_r($url);
?>
Tenga en cuenta que esto es parcialmente código psuedo. Esto crea una URL con una longitud aleatoria (entre 10 y 20) y rellena cada carácter con un código ASCII aleatorio que corresponde a una letra en el alfabeto. Hay algunos caracteres "basura" entre las letras mayúsculas y minúsculas en la tabla ASCII, por lo que se volverá a desplegar un número aleatorio hasta que se genere un número ASCII válido.
Esto supone que está almacenando esta URL en una base de datos. Para garantizar que esta cadena sea única, debe verificar si aún existe en la base de datos. Si no es así, agrégalo y estarás bien. Si existe, vuelva a realizar el proceso hasta que obtenga una cadena única.
Es muy simple.
su URL es algo así como www.dominio.com/in/aquí/RANDOMPART
reescribe www.domain.com/in/here/* a un script de su elección. En este script, puede obtener el uri solicitado con los globales y puede dividirlo y usar la parte después del último ''/''. Esta es tu RANDOMPART. Debes verificarlo contra tu DB o lo que sea.
Para crear una url de este tipo, simplemente debe agregar algo detrás de "www.dominio.com/in/aquí/". Podrías generar una secuencia agradable y afortunadamente única con md5(uniqid(rand(), true))
.
No te olvides de guardar esta cadena en un db o lo que sea.
Espero que ayude.
Use la función uniqid () si solo desea una identificación aleatoria de una longitud especificada o use el hash md5 () de su url larga si necesita algo repetible. (salida siempre igual para una entrada dada). La creación de un servicio corto de URL usando PHP y MySQL proporciona un buen resumen de cómo armarlo todo.
Simplemente podría crear una matriz de todos los caracteres potenciales, luego seleccionar aleatoriamente la cantidad que desee y devolverlos como el "código" de la URL.
$arr = array(''a'',''b'',''c'',''d''); $count = count($arr) - 1; $str = $arr[rand(0, $coun)].$arr[rand(0, $coun)];
Esto no es aleatorio, ya que se basa en el ID de su registro de base de datos.
Cómo funciona:
básicamente tienes una cadena que es única pero se puede descifrar para representar un número, debes verla como un cifrado / descifrado corto.
Usted tiene una función que tomaría una ID única y luego creará una "cadena corta" única de esa identificación, y luego puede revertir el proceso para obtener la identificación única de la cadena corta.
Aquí hay un recorte que he encontrado de un sitio web:
function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if ($passKey !== null)
{
/* Although this function''s purpose is to just make the
* ID short - and not so much secure,
* with this patch by Simon Franz (http://blog.snaky.org/)
* you can optionally supply a password to make it harder
* to calculate the corresponding numeric ID */
for ($n = 0; $n<strlen($index); $n++)
{
$i[] = substr( $index,$n ,1);
}
$passhash = hash(''sha256'',$passKey);
$passhash = (strlen($passhash) < strlen($index)) ? hash(''sha512'',$passKey) : $passhash;
for ($n=0; $n < strlen($index); $n++)
{
$p[] = substr($passhash, $n ,1);
}
array_multisort($p, SORT_DESC, $i);
$index = implode($i);
}
$base = strlen($index);
if ($to_num)
{
// Digital number <<-- alphabet letter code
$in = strrev($in);
$out = 0;
$len = strlen($in) - 1;
for ($t = 0; $t <= $len; $t++)
{
$bcpow = bcpow($base, $len - $t);
$out = $out + strpos($index, substr($in, $t, 1)) * $bcpow;
}
if (is_numeric($pad_up))
{
$pad_up--;
if ($pad_up > 0)
{
$out -= pow($base, $pad_up);
}
}
$out = sprintf(''%F'', $out);
$out = substr($out, 0, strpos($out, ''.''));
}
else
{
// Digital number -->> alphabet letter code
if (is_numeric($pad_up))
{
$pad_up--;
if ($pad_up > 0)
{
$in += pow($base, $pad_up);
}
}
$out = "";
for ($t = floor(log($in, $base)); $t >= 0; $t--)
{
$bcp = bcpow($base, $t);
$a = floor($in / $bcp) % $base;
$out = $out . substr($index, $a, 1);
$in = $in - ($a * $bcp);
}
$out = strrev($out); // reverse
}
return $out;
}
Ejemplo
alphaID(9007199254740989); //-> PpQXn7COf
alphaID(''PpQXn7COf'', true); //-> 9007199254740989
hay un enlace al script aquí: https://github.com/kvz/deprecated/blob/kvzlib/php/functions/alphaID.inc.php