代码阅读--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;
}

你可能感兴趣的:(代码阅读--PHP后端 产生验证码)