日常生活中我们常见的很多劵码,比如游戏的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在阿里云下报错...