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

  • Post author:
  • Post category:其他


这些日子来……

一直在想个问题,

“如果你有一张面值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

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



版权声明:本文为codeBbHs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。