关键词搜索

源码搜索 ×
×

PHP随机生成不重复的8位卡号(数字)和卡密(字符串)

发布2020-09-18浏览1490次

详情内容

一、生成不重复的随机数字,可自定义长度(最多支持10位数) 

  1. /**
  2. * 生成不重复的随机数字(不能超过10位数,否则while循环陷入死循环)
  3. * @param int $start 需要生成的数字开始范围
  4. * @param int $end 结束范围
  5. * @param int $length 需要生成的随机数个数
  6. * @return number 生成的随机数
  7. */
  8. function getRandNumber($start = 0, $end = 9, $length = 8)
  9. {
  10. //初始化变量为0
  11. $count = 0;
  12. //建一个新数组
  13. $temp = array();
  14. while ($count < $length) {
  15. //在一定范围内随机生成一个数放入数组中
  16. $temp[] = mt_rand($start, $end);
  17. //$data = array_unique($temp);
  18. //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的keyvalue交换两次。这种做法比用 array_unique() 快得多。
  19. $data = array_flip(array_flip($temp));
  20. //将数组的数量存入变量count
  21. $count = count($data);
  22. }
  23. //为数组赋予新的键名
  24. shuffle($data);
  25. //数组转字符串
  26. $str = implode(",", $data);
  27. //替换掉逗号
  28. $number = str_replace(',', '', $str);
  29. return $number;
  30. }
  31. echo getRandNumber(0, 9, 8)."<br/>";

二、随机生成不重复的8位卡密

  1. //随机生成不重复的8位卡密
  2. function makeCardPassword()
  3. {
  4. $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  5. $rand = $code[rand(0, 25)]
  6. . strtoupper(dechex(date('m')))
  7. . date('d') . substr(time(), -5)
  8. . substr(microtime(), 2, 5)
  9. . sprintf('%02d', rand(0, 99));
  10. for (
  11. $a = md5($rand, true),
  12. $s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
  13. $d = '',
  14. $f = 0;
  15. $f < 8;
  16. $g = ord($a[$f]),
  17. $d .= $s[($g ^ ord($a[$f + 8])) - $g & 0x1F],
  18. $f++
  19. ) ;
  20. return $d;
  21. }
  22. echo makeCardPassword();

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载