数学在优惠券上的应用(编程篇)
之前分享了数学在优惠券上的应用, 怎么利用数学找出优惠券上的规律,并且利用规律生成新的可用的优惠代码。
前文规律回顾:
某家的优惠码基本是这个规律:47000RRRRRCODEZ
- RRRRR:代表随机号码,比如12345
- CODE:4位 code,这是最主要的号码,每个相同类别的折扣码都会有相同的 code。
- Z:最后的一位号码叫check sum,就是检查之前号码的总和。可以通过以下公式获得: 10 -((总数(单数位+ 偶数位x3))%10)
通过上面的规则,可以看出如果知道CODE,就只需要算出check sum就可以获得一个完整的优惠代码。
下面我们就写个小程序完成自动生成新的优惠代码这个步骤吧。
这是PHP版本:
function couponGenerator($data) { //47000+5位随机数字+CODE $data="47000"."".rand(10000,99999)."".$data; //前面的数字加上check sum $data=$data."".addchecksum($data); return $data; } //checksum的算法 //10 -((总数(单数位+ 偶数位x3))%10) function addchecksum($data){ $checksum=0; for ($x = 0; $x < 14; $x++) { //如果是单位数 if($x%2==0){ $checksum+=intval($data[$x]); } //如果是双位数 else{ $checksum+=intval($data[$x])*3; } } return "".((10-$checksum%10)%10); }
Python 版本:
def addchecksum(stuff): checkdigit = 0 for j in range(14): if j % 2 == 0: checkdigit += int(stuff[j]) else: checkdigit += int(stuff[j]) * 3 print(str(stuff) ) + str((10 -(checkdigit % 10))%10) def coupon_generator(price): for j in range(100): i = randint(0, 99999) addchecksum("47000" + "%05d" % i)
非常简单的小程序。很多程序代码不难写,难写的是思路,只要理清一下思路,代码想怎么写就可以怎么写。
好了,代码完成了。十几行代码可能省去很多精力算出新的优惠码~