有一APP需求,要求生成全局唯一号码(类似QQ号),但是要把好的号码预先留下或者在用户注册的时候判断将要 获取的号码是不是好号码。。。
这个怎么做?
比如8位开始,像88888888,12345678,11111111,22222222,33333333,10000001都不能给用户……
回复内容:
有一APP需求,要求生成全局唯一号码(类似QQ号),但是要把好的号码预先留下或者在用户注册的时候判断将要 获取的号码是不是好号码。。。
这个怎么做?
比如8位开始,像88888888,12345678,11111111,22222222,33333333,10000001都不能给用户……
楼主的真正问题是:如何确定一个数是否“好数”,而不是已知一堆好数如何筛掉(那还不容易?)。
这个问题很普遍,我相信QQ和电信运营商都经历过相同的问题。简单地设定一些规则是可行的,但肯定不全,无可避免会漏掉一些。
最关键的,很多时候不但要区别哪些数漂亮,还得确定它的“漂亮程度”。
我能给出的解决方案是,开发个爬虫,获取该数字相关的域名、QQ号、手机号是否已被注册、注册时间是什么、价格是多少。例如www.12345678.com肯定超贵的对不对?
把数据爬下来后给定一个“指标”进行排序,所谓指标可以就是价格,排名靠前的数就是“好数”了。如果有兴趣研究下去,可以根据这个排名归纳出一系列规则,例如“位数”、“重复数字的个数”等等,然后将这些规则作为输入,“指标”作为输出,使用机械学习的方法计算每一个规则的权重,如果你能组织出足够强大的神经网络,还可以直接把整个数作为输入。
但这种问题肯定有人研究过的对不对?所以做这些工作之前——先找论文!
可以正则表达式筛选。
比如(\d)\1{2,}表示找出同一个数字连续出现3次或以上的情况。(\d)(\d)\1\2表示ABAB的情况等。
当然正则还是有局限性的,比如没法方便的查找顺子等情况。这种情况需要通过生成器生成这类特殊数字拼入正则表达式。比如可以通过拼接生成如下表达式(123|234|345|456|567|678|789)来匹配三位递增的情况。
- 设计不让用户使用的号码正则表达式,还可以考虑维护号码黑名单
- random随机生成号码,并检查是否在黑名单中存在以及是否在数据库中存在,如果存在则重新调用生成函数
- 生成的号码存入数据库
其實就是「僞」隨機串,像 iPod 那樣自動過濾掉諸如「ABC」、「ABCABC」之類不「隨機」的隨機串。
只要寫一個判斷是否「不像隨機」用的方法,只要滿足就自動重新生成。
根據你的描述,「不像隨機」的串應該包括:
單個數的重複,如 88888888
連續遞增遞減的,如 12345678
「整」數,如 10000000
迴文數,如 10000001
代碼如下:
<code>function isPseudo(str) { str = str + ""; return isDuplicate(str) || isSeries(str) || isIdealInteger(str) || isPalindromic(str); } function isDuplicate(str) { var first = str[0]; for (var i = 1, n = str.length; i </code>
隨便找了幾個數試試,結果如下:
<code>Object {8888: true, 10000: true, 100001: true, 1112111: true, 12345678: true, 342333423: false, 657865789: false} </code>
用以上代碼,數字不像「隨機」(也就是漂亮)程度也差不多有了,再加上對單個數字的權重,加權計算就可以得到數字的「順」度。
本来看到这么多回复都不想写了,但是感觉回答都有点绕。。。
这个问题核心要分解成两个子问题:
1. 什么样的号码才是好的号码?
2. 怎么把这些好的号码可以实现单独分配?
对于问题一,这个想完全智能化是基本不可能的,需要用到人的知识,所以肯定是你例举
所有好号码的规则,再去匹配满足这个规则的数字。比如说ABAB,ABBB,AABB,AAAA等,还有可能是包含8或6的数量等。
这种编写代码的时候,就统一对boolean isAwesomeNumber(String number)的接口做一堆实现,然后逐一匹配,就类似templete模式的方式即可。
对于问题二,要看你的业务逻辑,如果是卖手机号,那需要提前帅选出来进行分类,那就输入一个号码段,执行上述方法判断是否满足好号码的任意规则。输出的结果就实现了预期功能了。
- 首先要自己制定一下“比较顺的数字”的标准。
- 每次生成之前,判断一下是否满足标准。如果满足就往后推一位,再判断…… 直到找到普通数字为止。
- 题目是“生成随机数”。如果要完全随机,又要全局唯一的话,随机的结果出来需要判重,比如找“比这个数大而没有重的最小的数”。感觉性能比不随机要略差一些。
- 题目里说是“APP需求”,感觉最好在服务端生成这个数,而不是 APP 端。
随机生成,过滤已经生成过的和要留的就行了,贴段Java
实现:
RandomStringUtils.randomNumeric(8)
使用了:commons-lang3
对你的问题比较感兴趣, 打算写个类库. 先留个坑, 等写完了会附上地址和使用方法. 所以我先说我的一下思路:
判断好坏是机器来判断, 所以如果是一个单纯的判断好/不好的bool值, 我想也没有多大意义, 因为这样做仅仅是一个过滤器, 无法判断好且好到什么程度, 我的想法有两点:
- 可以检查数字串是否为某类型, 如123 = ABC, 456 = AABB
- 对给定的数字串进行处理, 最后得出其规律, 如 ABC, AAA, AABB
- 对给出的数字串进行处理, 最后给出一个整数型的输出代表其好坏程度
对于3来说, 还涉及的一个问题是单个数字, 如8 对应的权值应该会大那么一点点
先写若干规则,
然后从0开始遍历,
符合规则的近白名单
不符合的不管
参考楼上各位回答,需要明确的是以下两个问题
1. 对于好号码的定义,就像AntonyBi所讲『什么样的号码才是好的号码』
2. 如何筛选(生成好号码)
对于问题一。我认为可以直接参考已有的规则(规则针对的是手机号的尾号),毕竟号码的好坏是人的感受。
另外规则不用定太多,链接中的有九条规则,保证了通常来讲最『顺』的号码另作分配,同时用户有可能获得规则外的相对『好』的号码,比如用户在申请时可以随机获得ABAC这样的号码。
对于问题二。
针对普通用户
第一步,随机生成号码。
第二步,判断生成的号码是不是『好』号码。
第三步,是好号码的话,回到第一步,不是到第四步
第四步,返回(返回后需要判断号码有没有被使用)
//假设低级用户可用ABC(123,234,345,...),高级用户可用ABCDE(12345,23456,...)
针对付费用户
第一步,看等级
第二步,根据等级(比如说低级),生成一个或多个随机数(比如说生成的是2,那么ABC就是234)
第三步(可选),看该数符不符合高级用户的规则,符合回到第二步,不符合到第四步
第四步,返回(返回后需要判断号码有没有被使用)
写了个demo判断生成的号码是不是好号码。其他语言的实现也会类似吧。
<code># 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) </code>

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
