我想用这种模式生成一个串行密钥:
DA-7470-20762
这就是我到目前为止所做的:
$code = strtoupper(md5(uniqid(microtime(true), true)));
$uuid = sprintf("%02s-%04o-%04o",
$code[0].$code[1],
$code[2].$code[3].$code[4].$code[5],
$code[6].$code[7].$code[8].$code[9]
);
但是我想阻止像这样的串行密钥:
AB-0000-0001
我需要删除所有0,因为它们是如此具有预测性。
有没有办法为像[1-9]
这样的八进制sprintf设置范围?
答案 0 :(得分:1)
我可能会按照以下方式处理:
printf('%2s-%4o-%4o',
chr(mt_rand(65, 70)) . chr(mt_rand(65, 70)),
mt_rand(01000, 07777),
mt_rand(01000, 07777));
答案 1 :(得分:1)
如果您只是想要一种最小化零的方法,您可以选择按照以下伪代码的方式进行预生成序列修改:
for each idx in 2, 4, 6 and 8:
if code[idx] == "0":
code [idx] = randomNumBetween("1","7")