日常生活中我们常见的很多劵码,比如游戏的CDKEY,充值卡的密码。这些都是劵码,那么你对这些劵码了解多少呢?

在劵码中,一般分 前后 两部分,前面的是明码,后面的是密匙,对于各个不同的运营和加密方式,这里就不多说。具体说下这个例子吧。
例子的需求是这样的:
产生10W张劵码,然后需要保证劵码的唯一性和可使用性
很简单的一句话,包含的问题比较多,10W的劵码怎么生成,用什么方法加密,怎样去防止别人试出密码,怎么保证劵码的唯一性。
我自己总结出来的4个问题,首先处理劵码的唯一性,我的处理方式是直接从10000-110000,这样产生的10W劵码是不存在重复性的,而这个方法也间接的处理了第一个问题,10W劵码怎么生成。
然后需要考虑的是怎么加密,还需要保证安全性。处理方式是sh1加密,然后去其中的前两位数字,如果不够用9补全。
下面的代码是我的处理方式:
<?php
/**
* 题目:需要生成10万的劵码,使用的时候需要核验。
* 要求:PHP语言,需要保证劵码的唯一性和安全性
* @date: 2015年9月8日
* @author: Administrator
* @return:
*/
// 核验后两位的数字
public function coupon($code,$key="code",$str=2){
//$code = 123456;$key='love';$str=2;
//加密
$res = sha1($code.$key);
// 获取前两位
$sum = 0;
$v='';
for($i=0;$i<strlen($res);$i++)
{
if( is_numeric($res[$i]) && $sum < $str)
{
$v.= $res[$i];
$sum++;
}
}
$i = strlen($v);
for($i;$i<2;$i++)
{
$v.=9;
}
return $v;
}
#...前面的代码
$code = trim($_POST['code']);
// 测试数据$code = 12345625;
$v = coupon(substr($code,6));
$code_key = substr($code,-2);
#...调用核验函数 返回v
if($v == $code_key){
#...比对完成
}else{
#...比对失败
}
#...后面的操作
?>这个是我的处理方式,只是设想,有什么问题请联系我,谢谢。
上一篇: TP中在模板中调用IF函数报错...
下一篇: ThinkPHP在阿里云下报错...