Поэтому мы решили создать и сохранить все возможные номера телефонов в мире, просто потому, что можем 🙂
Как бы Вы это сделали ?
Будет создано около 10 миллиардов номеров, будет использовано 5 терр 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 -> parse / format / isValidNumber ..
а также
function store ($nums_array){ /* Store in db */ }
Вероятно, можно было бы выполнить эту работу с парой процессоров и многопроцессорностью менее чем за месяц.
Но есть проблемы:
Обратное регулярное выражение lib часто (20% — 40%) повторяет числа, генерирует слишком короткие или длинные числа, генерирует числа с помощью «:».
С течением времени создание уникального номера становится все сложнее и сложнее, поскольку возможности сужаются.
Потребление диска и скорость MySQL могут быть не лучшим решением.
Учитывая, что это должно работать на одном сервере с одной удаленной БД, какова будет оптимальная реализация?
Задача ещё не решена.
Других решений пока нет …