[英]Generating a 10 digit random confirmation string php
我正在嘗試為我網站上創建的每個用戶帳戶創建一個“確認代碼”,並將其與個人信息一起存儲在數據庫中。 正如您在下面的示例中所看到的,我嘗試在時間變量中生成隨機字符串因子,但是,字符串是不必要的長。
我希望字符串比md5
生成的字符串更短我想知道是否有一種相對簡單的方法來生成具有極低沖突率的10位(最大)字母數字字符串?
我嘗試了什么:
md5(mt_rand(10000,99999).time() . 'example@domain.com');
輸出:
0dd6854dba19e70cfda0ab91595e0376
PHP提供openssl_random_pseudo_bytes
函數,可以安全地執行您想要的操作。
做類似的事情:
bin2hex(openssl_random_pseudo_bytes(5))
例如,上面的內容將為您提供類似e9d196aa14
。
或者,只需獲取現有MD5字符串的前10個字符。
這將生成來自Aa-Zz
和0-9
字符的任何隨機輸出字符串。
function genString($length) {
$lowercase = "qwertyuiopasdfghjklzxcvbnm";
$uppercase = "ASDFGHJKLZXCVBNMQWERTYUIOP";
$numbers = "1234567890";
$specialcharacters = "{}[];:,./<>?_+~!@#";
$randomCode = "";
mt_srand(crc32(microtime()));
$max = strlen($lowercase) - 1;
for ($x = 0; $x < abs($length/3); $x++) {
$randomCode .= $lowercase{mt_rand(0, $max)};
}
$max = strlen($uppercase) - 1;
for ($x = 0; $x < abs($length/3); $x++) {
$randomCode .= $uppercase{mt_rand(0, $max)};
}
$max = strlen($specialcharacters) - 1;
for ($x = 0; $x < abs($length/3); $x++) {
$randomCode .= $specialcharacters{mt_rand(0, $max)};
}
$max = strlen($numbers) - 1;
for ($x = 0; $x < abs($length/3); $x++) {
$randomCode .= $numbers{mt_rand(0, $max)};
}
return str_shuffle($randomCode);
}
用法
$str = genString(10);
我認為最好的方法是
$random = substr(number_format(time() * rand(),0,'',''),0,10); // you can increase the digits by changing 10 to desired digit
請檢查一下
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.