此为历史版本和 IPFS 入口查阅区,回到作品页
ericet
IPFS 指纹 这是什么

作品指纹

数学在优惠券上的应用(编程篇)

ericet
·
(image source: pixabay)


之前分享了数学在优惠券上的应用, 怎么利用数学找出优惠券上的规律,并且利用规律生成新的可用的优惠代码。

前文规律回顾:

某家的优惠码基本是这个规律: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)

非常简单的小程序。很多程序代码不难写,难写的是思路,只要理清一下思路,代码想怎么写就可以怎么写。

好了,代码完成了。十几行代码可能省去很多精力算出新的优惠码~

CC BY-NC-ND 2.0 授权