note 96898 added to function.uniqid

From: Date: Sun, 21 Mar 2010 22:45:33 +0000
Subject: note 96898 added to function.uniqid
Groups: php.notes 
Request: Send a blank email to php-notes+get-167283@lists.php.net to get a copy of this message
Running: rand_uniqid(9007199254740989); will return 'PpQXn7COf' and: rand_uniqid('PpQXn7COf', true); will return '9007199254740989' --- If you want the rand_uniqid to be at least 6 letter long, use the $pad_up = 6 argument --- You can support even more characters (making the resulting rand_uniqid even smaller) by adding characters to the $index var at the top of the function body. --- <?php function rand_uniqid($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, // 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; } echo rand_uniqid(1); ?> ---- Server IP: 69.147.83.197 Probable Submitter: 82.173.79.139 ---- Manual Page -- http://www.php.net/manual/en/function.uniqid.php Edit -- https://master.php.net/note/edit/96898 Del: integrated -- https://master.php.net/note/delete/96898/integrated Del: useless -- https://master.php.net/note/delete/96898/useless Del: bad code -- https://master.php.net/note/delete/96898/bad+code Del: spam -- https://master.php.net/note/delete/96898/spam Del: non-english -- https://master.php.net/note/delete/96898/non-english Del: in docs -- https://master.php.net/note/delete/96898/in+docs Del: other reasons-- https://master.php.net/note/delete/96898 Reject -- https://master.php.net/note/reject/96898 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#167283) next »