Der schnellste Generator und Validator der NINO (UK National Insurance Number). Generiert und validiert UK NI -Nummern auf nim39110 Spezifikationen auf Gov.uk.
test-nino
ist eine leistungsorientierte und hat keine Abhängigkeiten. Die Benchmarks sprechen für sich.
Erste Schritte
Installieren
Import
Verfügbare Funktionen
zufällig
inkrementell
bestätigen
normalisieren
Benchmarks
Was ist eine gültige britische Nationalversicherungsnummer?
Wie viele gültige britische Nationalversicherungszahlen gibt es?
Sie können das Test-Nino-Paket von NPM installieren:
npm i test-nino
// ESM/TypeScripTimport * als testnino aus 'test-nino'; // CommonjsConst testNino = require ('test-nino'); // denoimport * als testnino von "https://deno.land/x/test_nino@vx .Xx/mod.ts ";
Wird verwendet, um einen zufälligen Nino zu generieren:
const nino = testNino.random (); // Return eine gültige britische Nationalversicherungsnummer, z. B. AA000000A
Warnung: Es ist nicht garantiert, dass Sie diese Methode nicht mehr als einmal mehr als einmal generieren konnten. Wenn Sie jedes Mal einen einzigartigen NINO benötigen, schlage ich vor, dass Sie den inkrementellen Generator verwenden.
Diese Methode ist am besten, wenn Sie sicherstellen möchten, dass Sie keinen doppelten Nino generieren. Diese Funktion verwendet einen JavaScript-Generator, um alle möglichen gültigen britischen NI-Zahlen AA000000A-ZY999999D
zu zählen (insgesamt gibt es 1.492.000.000).
Der Generator wird auf Präfix, Anzahl und dann suffix aufgezählt.
// Erstellen Sie einen Generator InstanceConst uniquenigenerator = testNino.incremental (); für (let i = 0; i <= 10000000; i ++) {uniquenigenerator.next () // gibt die nächste Instanz vom Generator // am 1. ITERATION IT zurück Wird {Wert zurückgeben: 'aa000000a', fertig: false} // In der 2. Iteration wird {value: 'aa000000b', fertig: false} // ... // Auf der 10000000TH -Iteration zurückgeben {Wert: 'AC500000a', fertig: false}}
Die
done
-Eigenschaft kehrt nurtrue
, sobald alle möglichen Kombinationen aufgezählt wurden.
Diese Funktion validiert den bereitgestellten NINO und gibt ein Objekt zurück, das festgelegt hat, welche Regeln bestanden oder fehlgeschlagen sind.
Es wird erwartet, dass der NINO bereits ohne Formatierung usw. ist - Sie können
normalise
verwenden, um den Nino bei Bedarf vorzubereiten.
// ein gültiger ninotestnino.validat ("AB123456C"); // {// Regeln: {// Typ: true, // Länge: TRUE, // Präfix: true, // Nummer: true, // Suffix: True //}, // Ergebnis: true //} // Ein ungültiges ninotestnino.validat (1); // {// Regeln: {// Typ: false, //}, // Ergebnis: false //}
Das zurückgegebene Objekt hat immer eine
outcome
-Eigenschaft, aber die Funktion schlägt schnell fehl und gibt daher nur ein Ergebnis für jedes getestete Element des Nino zurück.
Diese Funktion normalisiert Ninos, streift Weißespace und wandelt sie in Großbuchstaben um.
testnino.normalise ('aa 00 00 00 a') // aa000000atestnino.normalise ('BB 123456 B') // BB123456B
Dies kann als Primer für die
validate
verwendet werden
Alle Benchmarks werden mit Benchmark.js auf dem Knoten V18.16.0 ausgeführt. CommonJS -Importe werden für alle Pakete verwendet, um die Dinge fair zu halten. Sie können die Benchmarks selbst aus dem benchmarks
-Ordner ausführen. Die Ergebnisse wurden auf 3 signifikante Zahlen abgerundet, um Varianzen zwischen Läufen zu glätten und vergleichbare Ergebnisse zu liefern.
test-nino
ist mehr als 2,6x schneller als der nächst schnellste zufällige Ni-Zahlengenerator:
Paket | Version | Ops/Sek |
---|---|---|
Fake-Nino | 0.0.1 | 5.810.000 |
random_uk_nino | 1.0.3 | 6.340.000 |
Avris-Generator | 0,8,2 | 2.900.000 |
Test-Nino | letzte | 17.000.000 |
Andere Pakete verwenden Schleifen, die den Prozess der
Generate random NINO > is it valid? > no > repeat
, bis ein gültiger Nino angegeben ist. Dies kostet die kostbare CPU -Zeit und blockiert die Knotenereignisschleife.test-nino
wird unterschiedlich gemacht und speichert stattdessen die vollständige Liste der gültigen Präfixe, die dann zufällig ausgewählt werden. Keine Schleifen führen zu einer konsistenten Leistung, die mit anderen Paketen nicht garantiert wird.
test-nino
ist mehr als 14-mal schneller als die nächstschnellste Validierungsfunktion bei der Validierung eines gültigen NINO:
Paket | Version | gültig (AA000000A) | Ungültig (a) | ungültig (NULL) | Ungültig (AAX00000A) | ungültig (AA00000XA) |
---|---|---|---|---|---|---|
gültig-Nino | 1.0.0 | 34.000.000 | 84.600.000 | 64.100.000 | 75.200.000 | 27.000.000 |
IS-National-Isurage-Number | 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 | 4,190.000 | 232.000 (Würfe) | 105.000 (Würfe) | 230.000 (Würfe) | 230.000 (Würfe) |
Test-Nino | letzte | 609.000.000 | 1.030.000.000 | 1.030.000.000 | 1.020.000.000 | 601.000.000 |
Die meisten anderen Pakete stützen sich auf Regex-Muster. Die Validierungsfunktion in
test-nino
verwendet stattdessen indexierte Charakter-Lookups, die viel schneller sind. Die Funktion schlägt auch schnell fehl und bedeutet noch größere Gewinne für bestimmte ungültige Szenarien.
Zum Zeitpunkt der Umsetzung von Gov.uk die Regeln zu zitieren:
Ein Nino besteht aus 2 Buchstaben, 6 Zahlen und einem Suffix, das immer A, B, C oder D. ist
Es sieht ungefähr so aus: qq 12 34 56 a
Alle Präfixe sind gültig außer:
Die Zeichen D, F, I, Q, U und V werden weder als erster noch als zweiter Buchstabe eines Nino -Präfixes verwendet.
Der Buchstabe O wird nicht als zweiter Buchstabe eines Präfixes verwendet.
Präfixe BG, GB, KN, NK, NT, TN und ZZ sind nicht zu verwenden
Betrachten wir zunächst die Einschränkungen für die ersten beiden Buchstaben des Nino -Präfixes:
Die Zeichen d, f, i, q, u und v werden weder als erster noch als zweiter Buchstabe des Präfixes verwendet und v) und 19 mögliche Entscheidungen für den zweiten Buchstaben (AZ mit Ausnahme von D, F, I, Q, U, V und O).
Die Präfixe BG, GB, KN, NK, NT, TN und ZZ sind nicht zu verwenden, daher gibt es 20 x 19 - 7 = 373 mögliche Kombinationen der ersten beiden Buchstaben.
Betrachten wir als nächstes die Beschränkungen des letzten Briefes, das das Suffix ist:
Das Suffix kann nur A, B, C oder D sein, daher gibt es 4 mögliche Suffixe.
Schließlich betrachten wir die sechs Zahlen im Nino:
Jede der sechs Zahlen kann 10 mögliche Werte (0-9) haben, sodass es 10^6 (1 Million) mögliche Kombinationen der sechs Zahlen gibt.
Wenn Sie dies alles zusammenfügen, wäre die Anzahl möglicher eindeutiger Ninos:
373 (für die ersten beiden Buchstaben) x 10^6 (für die sechs Zahlen) x 4 (für den letzten Buchstaben) = 1.492.000.000 mögliche Ninos.