Home  >  Article  >  Backend Development  >  php生成12位不重复数字字母组合会员卡号,该怎么解决

php生成12位不重复数字字母组合会员卡号,该怎么解决

WBOY
WBOYOriginal
2016-06-13 11:48:03983browse

php生成12位不重复数字字母组合会员卡号
在不查询数据库的情况下,每个会员登录进来会生成一个数字字母组合不重复的会员卡号。
------解决方案--------------------
让人最容易想到的是使用随机数,但是你无法证明两次的结果一定不相同
MD5产生32位的结果串并且已经证明了MD5存在“碰撞”:两个不同的内容具有相同的MD5值
同样你也无法证明截断后的MD5值与原串具有相同的唯一性
因此还是使用时间作为参数比较稳妥

function foo() {<br />  $o = $last = '';<br />  do {<br />    $last = $o;<br />    usleep(10);<br />    $t = explode(' ', microtime());<br />    $o = substr(base_convert(strtr($t[0].$t[1].$t[1], '.', ''), 10, 36), 0, 12);<br />  }while($o == $last);<br />  return $o;<br />}<br />
当然,这个生成算法同样具有局限性。12位的36进制数最多有 pow(36, 12) 种状态
当总量超过 pow(36, 12) 时,重复还是必然发生的

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn