猿问

生成随机数,怎么留下一些比较顺的数字。

有一APP需求,要求生成全局唯一号码(类似QQ号),但是要把好的号码预先留下或者在用户注册的时候判断将要 获取的号码是不是好号码。。。

这个怎么做?

比如8位开始,像88888888,12345678,11111111,22222222,33333333,10000001都不能给用户……

慕姐4208626
浏览 733回答 10
10回答

LEATH

本来看到这么多回复都不想写了,但是感觉回答都有点绕。。。 这个问题核心要分解成两个子问题: 1. 什么样的号码才是好的号码? 2. 怎么把这些好的号码可以实现单独分配? 对于问题一,这个想完全智能化是基本不可能的,需要用到人的知识,所以肯定是你例举所有好号码的规则,再去匹配满足这个规则的数字。比如说ABAB,ABBB,AABB,AAAA等,还有可能是包含8或6的数量等。 这种编写代码的时候,就统一对boolean isAwesomeNumber(String number)的接口做一堆实现,然后逐一匹配,就类似templete模式的方式即可。 对于问题二,要看你的业务逻辑,如果是卖手机号,那需要提前帅选出来进行分类,那就输入一个号码段,执行上述方法判断是否满足好号码的任意规则。输出的结果就实现了预期功能了。

慕桂英4014372

首先要自己制定一下“比较顺的数字”的标准。 每次生成之前,判断一下是否满足标准。如果满足就往后推一位,再判断…… 直到找到普通数字为止。 题目是“生成随机数”。如果要完全随机,又要全局唯一的话,随机的结果出来需要判重,比如找“比这个数大而没有重的最小的数”。感觉性能比不随机要略差一些。 题目里说是“APP需求”,感觉最好在服务端生成这个数,而不是 APP 端。

MYYA

先写若干规则, 然后从0开始遍历, 符合规则的近白名单 不符合的不管

回首忆惘然

参考楼上各位回答,需要明确的是以下两个问题 1. 对于好号码的定义,就像AntonyBi所讲『什么样的号码才是好的号码』 2. 如何筛选(生成好号码) 对于问题一。我认为可以直接参考已有的规则(规则针对的是手机号的尾号),毕竟号码的好坏是人的感受。 另外规则不用定太多,链接中的有九条规则,保证了通常来讲最『顺』的号码另作分配,同时用户有可能获得规则外的相对『好』的号码,比如用户在申请时可以随机获得ABAC这样的号码。 对于问题二。 针对普通用户 第一步,随机生成号码。 第二步,判断生成的号码是不是『好』号码。 第三步,是好号码的话,回到第一步,不是到第四步 第四步,返回(返回后需要判断号码有没有被使用) //假设低级用户可用ABC(123,234,345,...),高级用户可用ABCDE(12345,23456,...) 针对付费用户 第一步,看等级 第二步,根据等级(比如说低级),生成一个或多个随机数(比如说生成的是2,那么ABC就是234) 第三步(可选),看该数符不符合高级用户的规则,符合回到第二步,不符合到第四步 第四步,返回(返回后需要判断号码有没有被使用) 写了个demo判断生成的号码是不是好号码。其他语言的实现也会类似吧。 # required para:num,type list of int def is_charm_num(num): def is_AAAA(num): return num[-4] == num[-3] \ and num[-4] == num[-2]\ and num[-4] == num[-1] def is_ABCDE(num): return num[-5] + 1 == num[-4] \ and num[-5] + 2 == num[-3] \ and num[-5] + 3 == num[-2] \ and num[-5] + 4 == num[-1] def is_ABABAB(num): return num[-6] == num[-4] \ and num[-6] == num[-2] \ and num[-5] == num[-3] \ and num[-5] == num[-1] return is_AAAA(num) or is_ABABAB(num) or is_ABCDE(num) if __name__ == '__main__': num = 12345678 num_list = [] #num_list = map(int,str(num)) for n in str(num): num_list.append(int(n)) is_charm_num(num_list)
随时随地看视频慕课网APP

相关分类

Python
我要回答