Sabe quando estamos vendo um vídeo no YouTube e olhamos o ID do vídeo no link e não vemos um ID numérico, mas vemos um id textual (feito com letras e números), mas ou menos assim: KGjTdt2AeGA?
Esse tipo de índice é muito mais amigável, pois quando temos muitos registros no banco de dados fica “feio” mostrar 18713543 na URL.
Existe uma função pronta (que encontrei aqui, criada pelo Kevin Zonneveld) e que usa técnicas de encriptação para fazer o trabalho de converter números em letras e vice-e-versa.
Código da função
Vamos ao código da função e depois eu explico como usá-la:
<?php
/**
* Traduz números para texto e vice-e-versa
*
* Traduz qualquer número (até 9007199254740992)
* para uma versão menor, usando letras:
* 9007199254740989 --> PpQXn7COf
*
* Especificando o segundo parâmetro como true temos:
* PpQXn7COf --> 9007199254740989
*
* @author Kevin van Zonneveld <kevin@vanzonneveld.net>
* @copyright 2008 Kevin van Zonneveld (http://kevin.vanzonneveld.net)
* @license http://www.opensource.org/licenses/bsd-license.php New BSD Licence
* @version SVN: Release: $Id: alphaID.inc.php 344 2009-06-10 17:43:59Z kevin $
*
* @param mixed $in String or long input to translate
* @param boolean $to_num Reverses translation when true
* @param mixed $pad_up Number or boolean padds the result up to a specified length
*
* @return mixed string or long
*/
function alphaID($in, $to_num = false, $pad_up = false) {
// Letras que serão usadas no índice textual
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$base = strlen($index);
if ($to_num) {
// Tradução de texto para número
$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);
}
}
} else {
// Tradução de número para texto
if (is_numeric($pad_up)) {
$pad_up--;
if ($pad_up > 0) {
$in += pow($base, $pad_up);
}
}
$out = "";
for ($t = floor(log10($in) / log10($base)); $t >= 0; $t--) {
$a = floor($in / bcpow($base, $t));
$out = $out . substr($index, $a, 1);
$in = $in - ($a * bcpow($base, $t));
}
$out = strrev($out);
}
return $out;
}
?>Se você quiser, pode fazer o download do arquivo (.txt) com a função (com a indentação correta).
Usando a função
Para usar a função é bem simples, veja a conversão de número em texto:
<?php echo alphaID(9007199254740989); // Retorno: PpQXn7COf ?>
E se usarmos o texto como argumento, definindo o segundo parâmetro como true, teremos o ID novamente:
<?php
echo alphaID('PpQXn7COf', true);
// Retorno: 9007199254740989
?>–
Essa função é bem legal pois além de deixar o sistema mais seguro (não é só mudar de 58 pra 57 na URL pra tentar acessar outro registro do banco) deixa o sistema mais profissional (não é todo mundo que mostra IDs textuais por aí). ![]()
Espero que tenham gostado!
Não se esqueçam de assinar o RSS do Blog e/ou me seguirem no Twitter para ter acesso à todas as novidades em tempo real.
Você também vai gostar de ler:
- Criando um sistema de logins com classe no PHP – Parte 3
- Criando um sistema de logins com classe no PHP – Parte 2
- Criando um sistema de logins com classe no PHP – Parte 1
- Criando Sistemas Seguros – Parte 1
- Criando um sistema de destaques – Parte 2
Postado em MySQL, PHP, Tutoriais
Com as tags Banco de Dados, Código, Download, indentação, Índice, MySQL, Novidade, PHP, Release, RSS, Scripts, Segurança, Sistema, source, TinyURL, Twitter, URL
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo:
