यह आपके डेटाबेस रिकॉर्ड की आईडी के आधार पर यादृच्छिक नहीं है।
यह कैसे काम करता:
मूल रूप से आप एक स्ट्रिंग है अद्वितीय है है, लेकिन यह एक संख्या का प्रतिनिधित्व करने के decrypted किया जा सकता है, तो आप एक छोटी एन्क्रिप्शन/डिक्रिप्शन के रूप में यह पर गौर करना चाहिए।
आपके पास एक ऐसा फ़ंक्शन है जो एक अद्वितीय आईडी लेगा और फिर यह उस आईडी से एक अद्वितीय 'शॉर्ट स्ट्रिंग' बनाता है, और फिर आप छोटी स्ट्रिंग से अद्वितीय आईडी प्राप्त करने के लिए प्रक्रिया को उलट सकते हैं।
alphaID(9007199254740989); //-> PpQXn7COf
alphaID('PpQXn7COf', true); //-> 9007199254740989
वहाँ स्क्रिप्ट के लिए एक लिंक है
function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
$index = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
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;
}
उदाहरण:: https://github.com/kvz/deprecated/blob/kvzlib/php/functions/alphaID.inc.php
लेकिन इस तार नकल करने ले जा सकता है (हालांकि
यहाँ एक Snipped मैं एक वेबसाइट के पाया है है बहुत संभावना नहीं है)। – acme
क्या इससे कोई फर्क पड़ता है? केवल एक चीज जो आपको करने की ज़रूरत है, यह सुनिश्चित करने के लिए जांचें कि यह कुछ विधि (जैसे कि डीबी लुकअप, अगर उस तरह से संग्रहीत है) द्वारा अद्वितीय है। – Alex