当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP注册码/序列号生成实例程序

发布:smiling 来源: PHP粉丝网  添加日期:2014-01-17 09:47:51 浏览: 评论:0 

昨天开发一个产品要求由网站总后台生成一个注册码/序列号,然后我们以573-225-374-118这种格式生成,并且不重复在数据库是唯一的,下面我把我找到的与自己写的都记录一下。

原理,就是生成mt_rand随机种子来生成,然后利用相关函数进行读取操作.

例1代码如下:

  1. /** 
  2.  * 序列号生成器 
  3.  */ 
  4. function snMaker($pre = '') { 
  5.  $date = date('Ymd'); 
  6.  $rand = rand(1000000,9999999); 
  7.  $time = mb_substr(time(), 5, 5, 'utf-8'); 
  8.  $serialNumber = $pre.$date.$time.$rand
  9. // echo strlen($serialNumber).'<br />'; 
  10.  return $serialNumber
  11. echo snMaker(); 
  12. /** 
  13.  * 将一个字符串的一部分替换成某一特定字符 
  14.  * @param str or int $str 需要处理的字符串 
  15.  * @param str or int $to 将替换成什么字符串 
  16.  * @param int $start 保留前几个字符 
  17.  * @param int $end 保留后几个字符 
  18.  */ 
  19. function hideString($str = 'hello'$to = '*'$start = 1, $end = 0) { 
  20.  $lenth = strlen($str) - $start - $end
  21.  $lenth = ($lenth < 0) ? 0 : $lenth
  22.  $to = str_repeat($to$lenth); 
  23.  $str = substr_replace($str$to$start$lenth); 
  24.  return $str
  25. echo hideString(); 

例2,生成注册码/序列号,以下为引用的内容,代码如下:

  1. <?php 
  2.  /* 配置 */ 
  3.  $key_sum = 1500;    //CD-Key最大数量,防止重复值 
  4.  $key_total = 1000;    //最终需要的CD-Key数量 
  5.  $limiter = "-";    //CD-Key每组数字之间的连接符 
  6.  $save_file = "./cd_key.txt"//保存CD-Key文件 
  7.  $num_file = "./number.txt"//序列数字文件 
  8.  $file = file($num_file);  //打开序列数文件 
  9.  $start_num = 0;    //最小随机数 
  10.  $end_num = count($file);  //最大随机数 
  11.  /* 生成随机数字串 */ 
  12.  $cdkey = array(); 
  13.  for ($i=0; $i<$key_sum$i++) 
  14.  { 
  15.      $key_str = $file[rand_num($start_num$end_num)].$limiter
  16.                          $file[rand_num($start_num$end_num)].$limiter
  17.                          $file[rand_num($start_num$end_num)].$limiter
  18.                          $file[rand_num($start_num$end_num)]; 
  19.       $cdkey[] = str_replace("rn"""$key_str); 
  20.  } 
  21.  /* 过滤重复串并且提取最终需要的CD-Key数量 */ 
  22.  $cdkey = array_unique($cdkey); 
  23.  $key_result = array(); 
  24.  for ($i=0; $i<$key_total$i++) 
  25.  { 
  26.      $key_result[] = $cdkey[$i]; 
  27.  } 
  28.  /* 把最终的CD-Key写入文件 */ 
  29.  $fp = fopen($save_file"w+"or die("Open $save_file failed"); 
  30.  fwrite($fp, implode("rn"$key_result)) or die("Write $save_file failed"); 
  31.  unset($cdkey); 
  32.  unset($$key_result); 
  33.  fclose($fp); 
  34.  echo "Create $key_total key succeed!"
  35.  /* 随机函数 */ 
  36.  function rand_num($start$end
  37.  { 
  38.      return mt_rand($start$end); 
  39.  } 
  40. ?> 

执行上面的程序就会生成cd_key.txt文件,里面包含了类似下面的验证码,以下为引用的内容:

573-225-374-118,691-553-280-280,969-594-607-211,251-575-776-563,280-289-739-533...

这样,就完整的达到了我们的目的,你也可以把以上随机串保存到数据库里,方便调用,灵活设置以上变量,你能够生成16位、20位的验证码,如果你有兴趣,也可以写类似 XDF8F-ADE89-D0J5C-4RTFG之类的验证码

Tags: PHP注册码 序列号 生成

分享到: