Самый быстрый генератор и валидатор Nino (Nino National Insurance Number). Генерирует и проверяет числа NI в Великобритании в спецификации NIM39110 на Gov.uk.
test-nino
является ориентированным на производительность и имеет нулевые зависимости. Цитрицы говорят сами за себя.
Начиная
Установить
Импорт
Доступные функции
случайный
постепенный
проверять
нормализовать
Тесты
Какой действующий национальный страховой номер в Великобритании?
Сколько существует действующих номеров национального страхования Великобритании?
Вы можете установить пакет Test-Nino из NPM:
npm i test-nino
// esm/typectriptImport * as testnino из «test nino»; // commonjsconst testnino = require ('test-nino'); // denoimport * as testnino из "https://deno.land/x/test_nino@vx .Xx/mod.ts ";
Используется для генерации случайного нино:
const nino = testnino.random (); // Возвращает действительный национальный номер страхования Великобритании, например, AA000000A
Предупреждение: не гарантируется, что вы не можете генерировать одну и ту же Nino больше, чем раз, используя этот метод. Если вам требуется уникальный Nino каждый раз, я предлагаю вам использовать инкрементный генератор.
Этот метод лучше всего, если вы хотите убедиться, что не генерируете дубликат Nino. Эта функция использует генератор JavaScript для перечисления через все возможные действительные номера NI в Великобритании AA000000A-ZY999999D
(всего 1 492 000 000 000 000).
Генератор перечисляет префикс, номер, а затем суффикс.
// Создать генератор instanceconst uniquenigenerator = testnino.incremental (); for (let i = 0; i <= 10000000; i ++) {uniquenigenerator.next () // Возвращает следующий экземпляр // на 1 -й итерации. вернуть {value: 'aa000000a', dode: false} // На 2 -й итерации она вернет {value: 'aa000000b', dode: false} // ... // на 10000000 -й итерации вернет {value: 'Ac500000a', Dode: false}}
Свойство
done
true
только после того, как все возможные комбинации будут перечислены.
Эта функция подтвердит предоставленную Нино и вернет объект, который подробно рассказал, какие правила прошли или не удалось.
Ожидается, что нино уже без форматирования и т. Д. - вы можете использовать
normalise
, чтобы подготовить нино, если это необходимо.
// Действительный ninoTestnino.validate ("ab123456c"); // {// Правила: {// Тип: true, // длина: true, // prefix: true, // номер: true, // суффикс: true: true //}, // Результат: true //} // Неверный ninotestnino.validate (1); // {// Правила: {// Тип: false, //}, // Результат: false //}
Возвращенный объект всегда будет иметь свойство
outcome
, но функция не удается быстро, и поэтому будет возвращать только результат для каждого протестированного элемента Nino.
Эта функция будет нормализовать NINOS, лишить пробелы и преобразовать ее в перспективные символы.
testnino.normalise ('aa 00 00 00 a') // aa00000000testnino.normalise ('bb 123456 b') // bb123456b
Это можно использовать в качестве праймера для функции
validate
Все тесты выполняются с использованием Benchmark.js на узле V18.16.0. Импорт CommonJS используется для всех пакетов, чтобы сохранить справедливые вещи. Вы можете запустить тесты самостоятельно из папки benchmarks
. Результаты были округлены до 3 значимых цифр, чтобы сгладить различия между прогонами и обеспечить более сопоставимые результаты.
test-nino
более чем в 2,6 раза быстрее, чем следующий самый быстрый случайный генератор чисел Ni:
упаковка | версия | Ops/Sec |
---|---|---|
поддельный-нино | 0,0,1 | 5 810 000 |
random_uk_nino | 1.0.3 | 6 340 000 |
Avris-Generator | 0,8,2 | 2900 000 |
ТЕСТ-НИНО | последний | 17 000 000 |
Другие пакеты используют петли, которые проходят через процесс
Generate random NINO > is it valid? > no > repeat
, пока не будет дана действительная нино. Это стоит драгоценное время процессора и блокирует петлю события узла.test-nino
сделан отличным и вместо этого хранит полный список действительных префиксов, которые затем выбираются случайным образом. Никакие петли не приводят к последовательной производительности, которая не гарантирована с другими пакетами.
test-nino
более чем в 14 раз быстрее, чем следующая самая быстрая проверка функции при проверке действительной Nino:
упаковка | версия | Действительно (AA000000A) | неверно (а) | неверный (нулевый) | неверный (AAX00000A) | неверный (AA00000XA) |
---|---|---|---|---|---|---|
Действительно-Нино | 1.0.0 | 34 000 000 | 84 600 000 | 64 100 000 | 75 200 000 | 27 000 000 |
Национальный страховой нубер | 1.0.0 | 42 800 000 | 1 030 000 000 | 1 030 000 000 | 80 000 000 | 33 000 000 |
Avris-Generator | 0,8,2 | 4190 000 | 232 000 (броски) | 105 000 (броски) | 230 000 (броски) | 230 000 (броски) |
ТЕСТ-НИНО | последний | 609 000 000 | 1 030 000 000 | 1 030 000 000 | 1 020 000 000 | 601 000 000 |
Большинство других пакетов полагаются на шаблоны регуляции, функция проверки в
test-nino
использует индексированные поиски символов, которые намного быстрее. Функция также не удается быстро, что означает еще большие выгоды для конкретных недопустимых сценариев.
При ссылке на правила во время реализации от Gov.uk:
Нино состоит из 2 букв, 6 чисел и суффикс, который всегда является a, b, c или d.
Это выглядит примерно так: QQ 12 34 56 A
Все префиксы действительны, кроме:
Персонажи D, F, I, Q, U и V не используются как первая или вторая буква префикса Nino.
Буква O не используется в качестве второй буквы префикса.
Префиксы BG, GB, KN, NK, NT, TN и ZZ не должны использоваться
Во -первых, давайте рассмотрим ограничения на первые две буквы префикса Нино:
Персонажи D, F, I, Q, U и V не используются как первая или вторая буква префикса, поэтому для первой буквы есть 20 возможных вариантов (AZ, исключая D, F, I, Q, U и v) и 19 возможных вариантов для второй буквы (AZ, исключая D, F, I, Q, U, V и O).
Префиксы BG, GB, KN, NK, NT, TN и ZZ не должны использоваться, поэтому существует 20 x 19 - 7 = 373 возможных комбинаций первых двух букв.
Далее давайте рассмотрим ограничения на последнее письмо, которое является суффиксом:
Суффикс может быть только A, B, C или D, поэтому есть 4 возможных суффикса.
Наконец, давайте рассмотрим шесть чисел в Нино:
Каждое из шести чисел может иметь 10 возможных значений (0-9), поэтому существует 10^6 (1 миллион) возможных комбинаций шести чисел.
Собрав все это вместе, количество возможных уникальных ниносов было бы:
373 (для первых двух букв) x 10^6 (для шести чисел) x 4 (для окончательной буквы) = 1 492 000 000 Возможных нинос.