代码阅读--PHP后端 产生验证码

function makeSeccode($nchash){
$seccode = random(6, 1);//产生6位数字
   $seccodeunits = '';
$s = sprintf('%04s', base_convert($seccode, 10, 23));//base_convert将$seccode从10进制转换为23进制
//%s:字符串占位符
$seccodeunits = 'ABCEFGHJKMPRTVXY2346789';//23个字符
if($seccodeunits) {
$seccode = '';
for($i = 0; $i < 4; $i++) {
//为什么这样转换,不直接从$seccodeunits中取?
         $unit = ord($s{$i});//ord() 函数返回字符串的首个字符的 ASCII 值。十进制
$seccode .= ($unit >= 0x30 && $unit <= 0x39) ? $seccodeunits[$unit - 0x30] : $seccodeunits[$unit - 0x57];
         //0~9ASCII值十六进制为0x30~0x39
      }
}
setNcCookie('seccode'.$nchash, encrypt(strtoupper($seccode)."\t".(time())."\t".$nchash,MD5_KEY),3600);
return $seccode;
}

/**
* 取得随机数
*
* @param int $length 生成随机数的长度
* @param int $numeric 是否只产生数字随机数 1是0否
* @return string
*/
function random($length, $numeric = 0) {
$seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
$seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed));
$hash = '';
$max = strlen($seed) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $seed{mt_rand(0, $max)};
}
return $hash;
}

/**
* 设置cookie
*
* @param string $name cookie 的名称
* @param string $value cookie 的值
* @param int $expire cookie 有效周期
* @param string $path cookie 的服务器路径 默认为 /
* @param string $domain cookie 的域名
* @param string $secure 是否通过安全的 HTTPS 连接来传输 cookie,默认为false
*/
function setNcCookie($name, $value, $expire='3600', $path='', $domain='', $secure=false){
if (empty($path)) $path = '/';
if (empty($domain)) $domain = SUBDOMAIN_SUFFIX ? SUBDOMAIN_SUFFIX : '';
$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;
$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);
$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);//setcookie()已被封装

$_COOKIE[$name] = $value;
}

转载于:https://www.cnblogs.com/asdfgh/p/4867824.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值