所以我们开始创建和存储世界上所有可能的有效手机号码,只是因为我们可以:)
你会怎么做?
将创建大约 100 亿个数字,使用 5 Terra 的 MySQL 存储,存储在数据库中的所有数字都是唯一的。
所以 1. 我们可以从这里提取正则表达式,表达式如下:
'mobile' =>
array (
'NationalNumberPattern' => '
1(?:
5[0-25-9]\\d{8}|
6[023]\\d{7,8}|
7(?:
[0-57-9]\\d?|
6\\d
)\\d{7}
)
然后 2. 我们可以使用它来生成数字,如下所示:
use ReverseRegex\Lexer;
use ReverseRegex\Random\SimpleRandom;
use ReverseRegex\Parser;
use ReverseRegex\Generator\Scope;
# load composer
require "vendor/autoload.php";
$lexer = new Lexer('expression from above');
$gen = new SimpleRandom(10007);
$result = '';
$parser = new Parser($lexer,new Scope(),new Scope());
$parser->parse()->getResult()->generate($result,$gen);
echo $result;
回声是这样的:
+33944631251+3613331251+3687539481+3612310548+3659429165+3689423986+33403300091+3646142500+3662480496+
我们可以仔细检查(矫枉过正)、验证、解析和存储:
$phoneLib -> 解析/格式化/isValidNumber ..
和
function store ($nums_array){ /* Store in db */ }
可能可以在不到一个月的时间内使用几个 CPU 和多进程来完成这项工作。
但是,遇到了问题:反向正则表达式库经常(20% - 40%)重复数字,生成太短或太长的数字,生成带有“:”的数字。在时间尺度上,随着可能性的缩小,创建一个唯一的数字变得越来越难。MySQL 的磁盘消耗和速度可能不是这里最好的解决方案。
鉴于这应该在具有一个远程数据库的一台服务器上运行,那么最佳实现是什么?