余数大法写了个手机虚拟号

这些日子来……
一直在想个问题,
“如果你有一张面值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;
}

效果图:

domeVNum.mp4.gif

注意:上述代码仅拿核心部分来突出余数方法,完成一个比较简单的虚拟号生成结果。而非完整代码。此外,本文到此结束。谢谢!

你可能感兴趣的:(余数大法写了个手机虚拟号)