php如何生成不重复的卡号
就像电话卡似的,全是数字,不能带字母。
最开始想到是:
N位随机数+数据库一个表的自增id+N位随机数
不想用数据库,想到一个唯一的标准是时间。用时间戳跟上几位随机数。
假如这样生成16的卡号:
时间戳10位+6位随机数 1316651745695261
有时需要一个循环生成多个卡号,一个循环里前面的时间戳(基本是一样,除非循环里还有其它费时操作),后面的6位随机数无法保证唯一。想到结合microtime
循环调用microtime十次:
0.80717200 1316675664
0.80720600 1316675664
0.80721300 1316675664
0.80721900 1316675664
0.80722400 1316675664
0.80723000 1316675664
0.80723600 1316675664
0.80724100 1316675664
0.80724600 1316675664
0.80725200 1316675664
我想着是跟上位置在807172这里的数字便于区分开。代码:
for($i=0;$i<10;$i++){ //echo $this->microtime_float(); echo $time = microtime(); $arr = explode(" ",$time); $micro = $arr[0]*100000000; $micro_str = substr($micro."",0,6); $timestamp = $arr[1]; echo "\t".$timestamp."".$micro_str; echo '<br>'; }