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