这些日子来……
一直在想个问题,
“如果你有一张面值20元钞票,
请别花掉,因为它可以值20元!”
此情此景「心」情舒畅,
有20元搞了6瓶3块钱啤酒,
剩两块再买支烤串,
无愧酒香透长安,
满城尽带黄金甲。
快哉~ 快哉~
待酒将饮尽时,
转间发现20元,
应该是7瓶3块钱啤酒。
迷迷糊糊,开始怀疑人生。
待醉一夜后…
开始算昨夜酒钱。
然后……
就一发不可收拾,
从中得知,20除3余2,
那么21除以3余0,
那么22除以3余1,
那么23除以3余2,
那么24除以3余0,
那么25除以3余1,
那么26除以3余2,
那么27除以3余0,
好了「恨不得把什么都分成3份」,
对哦!什么都分成3份。
那么(不那么了)
既然如此,什么都分成3份。
可以理解为了以3为一个周期,
则上述以3为周期得到的余数都是「0,1,2」,
所有余数也小于3,就是小于一个指定的周期。
那么(不那么了呀)
既然如此,在茫茫人海。
说错了!正如整数是处于无穷「正负没有边界」。
而可以通过某个整数除以某个周期,
得到的余数在指定某个周期的范围内。
此时,估计酒醒了,
能感到些许的谜笑。
要是能再举个例子「happy~ happy~」
答案是可以的!
比如,我们每个人都有自己的手机号码。随着互联网的普及,手机号码可能与很多应用程序有着绑定。有时蓝天白云,想出街shopping!那么可能需要call隔壁老王护送一下啦。但是,又为了防止老王得知本仙女的手机号码。就有必要对手机号码进行加密了「也称“手机虚拟号”」。那么,重点来了。11位数的号码,通过加密之后应该还是11位数。免得老王直接再要手机号码了。
这时,就回到了上面的话题。一般手机号码的单个数字都在(0到9),可见不能超过9了。那么(好像有点喜欢那么)。则我们可以以9为一个周期呀!即9为除数,得到的余数范围在0~9,保证每个数字经过加密之后还是个位数。符合号码的数字组成。
好了~
说这么多我得威一下:
function virtualNumberFun(prefix, number) {
//10000以内随机数
var randomNumber = Math.round(Math.random() * 10000),
//先去除输入手机号码前三位,进行正则方式分割,后合并于数组
number = ((String(number).slice(3)).replace(/(?=(\B\d{1})+$)/g, ',')).split(','),
//指定一种类型的手机号码前三位(如177,188,199等)
virtualNumber = String(prefix);
/* 遍历number数组中的每一项
每一项加上一个10000以内的随机数,后除以9取余
再用除数(周期数)减去得到每一项的余数
最终拼接每一项 */
number.forEach(item = >{
virtualNumber += parseInt(9 - (parseInt(Number(item) + randomNumber) % 9));
});
return virtualNumber;
}
效果图:
注意:上述代码仅拿核心部分来突出余数方法,完成一个比较简单的虚拟号生成结果。而非完整代码。此外,本文到此结束。谢谢!