设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1917|回复: 1
收起左侧

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

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

  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. ?>
复制代码
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-20 01:28 , Processed in 0.460026 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表