设为首页收藏本站帮助中心
查看: 426|回复: 1
收起左侧

Discuz! X 实现的9位数字短信邮件验证码生成算法 (可设定有效期,无需存入数据库)

[复制链接]
发表于 2019-5-23 18:13:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x

  1. <?php
  2. require './source/class/class_core.php';
  3. C::app()->init();

  4. //新建.php文件,放到论坛根目录即可测试

  5. /*
  6. 通过 authkey uid 计算出9位数字验证码 (无需存入数据库)
  7.         参数1:附加文本 (可以是手机号,邮箱地址等)
  8.         参数2:时间戳 (校验时搜索用,留空为当前时间戳)
  9. */

  10. function getcode($text = '',$time = 0){
  11.         global $_G;
  12.         $hash = $_G['setting']['authkey'].chr(0).$_G['uid'].chr(0).$text;
  13.         $hash .= floor(($time ? $time : $_G['timestamp']) / 60);
  14.         $crc = abs(crc32(md5($hash,1))) % 1000000000;
  15.         return sprintf("%09d", $crc);
  16. }

  17. /*
  18.         校验9位验证码是否在有效期内
  19.         参数1:9位验证码
  20.         参数2:附加文本 (与生成时的必须一致)
  21.         参数3:有效期 (搜索范围,默认30分钟)
  22.         验证通过返回1 否则返回0
  23. */


  24. function checkcode($code,$text,$tov = 30){
  25.         global $_G;
  26.         $timestamp = $_G['timestamp'];
  27.         for($i=0;$i<$tov;$i++) {
  28.                 if(getcode($text,$timestamp - $i*60) == $code){
  29.                         return 1;
  30.                 }
  31.         }
  32.         return 0;
  33. }


  34. $code = getcode("AAAA");
  35. echo $code."<br>";
  36. echo checkcode($code,"AAAA") ? "ok" : "err";


  37. ?>
复制代码
这个小可爱很神秘,什么都没留下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则