0

所以我们开始创建和存储世界上所有可能的有效手机号码,只是因为我们可以:)

你会怎么做?

将创建大约 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+
  1. 我们可以仔细检查(矫枉过正)、验证、解析和存储:

    $phoneLib -> 解析/格式化/isValidNumber ..

 function store ($nums_array){ /* Store in db */ }

可能可以在不到一个月的时间内使用几个 CPU 和多进程来完成这项工作。

但是,遇到了问题:反向正则表达式库经常(20% - 40%)重复数字,生成太短或太长的数字,生成带有“:”的数字。在时间尺度上,随着可能性的缩小,创建一个唯一的数字变得越来越难。MySQL 的磁盘消耗和速度可能不是这里最好的解决方案。

鉴于这应该在具有一个远程数据库的一台服务器上运行,那么最佳实现是什么?

4

0 回答 0