stdnum 1.4.14 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -160
- package/lib/cjs/de/index.d.ts +1 -0
- package/lib/cjs/de/index.js +3 -2
- package/lib/cjs/de/passport.d.ts +2 -0
- package/lib/cjs/de/passport.js +82 -0
- package/lib/cjs/de/pwnr.d.ts +2 -0
- package/lib/cjs/de/pwnr.js +99 -73
- package/lib/esm/de/index.d.ts +1 -0
- package/lib/esm/de/index.js +3 -1
- package/lib/esm/de/passport.d.ts +2 -0
- package/lib/esm/de/passport.js +56 -0
- package/lib/esm/de/pwnr.d.ts +2 -0
- package/lib/esm/de/pwnr.js +96 -72
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -29,165 +29,166 @@ All country validators are in the "namespace" of the ISO country code.
|
|
|
29
29
|
|
|
30
30
|
## Supported Countries and Numbers
|
|
31
31
|
|
|
32
|
-
| Country | Code | Name | Group | Meaning
|
|
33
|
-
| ---------------------- | ---- | --------------- | ------------------ |
|
|
34
|
-
| Andorra | AD | NRT | Tax | Tax Register Identifier (Número de Registre Tributari)
|
|
35
|
-
| Albania | AL | NIPT | Vat | Albanian Vat Identifier (Numri i Identifikimit për Personin e Tatueshëm)
|
|
36
|
-
| Argentina | AR | CBU | Bank | Single Banking Code (Clave Bancaria Uniforme)
|
|
37
|
-
| Argentina | AR | CUIT | Tax | Unique Tax Identification Code (Código Único de Identificación Tributaria)
|
|
38
|
-
| Argentina | AR | DNI | Person | National Identity Document (Documento Nacional de Identidad)
|
|
39
|
-
| Austria | AT | Businessid | Company | Austrian Company Register Number
|
|
40
|
-
| Austria | AT | TIN | Tax | Austrian tax identification number (Abgabenkontonummer)
|
|
41
|
-
| Austria | AT | UID | VAT | Austrian VAT number (Umsatzsteuer-Identifikationsnummer)
|
|
42
|
-
| Austria | AT | VNR | Person | Austrian social security number(Versicherungsnummer)
|
|
43
|
-
| Australia | AU | ABN | Company | Australian Business Number
|
|
44
|
-
| Australia | AU | ACN | Company | Australian Company Number
|
|
45
|
-
| Australia | AU | TFN | Tax/Person/Company | Australian Tax File Number
|
|
46
|
-
| Bosnia and Herzegovina | BA | JMBG | Person | Unique Master Citizen Number
|
|
47
|
-
| Belize | BZ | TIN | Person/Company | Brazilian Tax ID ()
|
|
48
|
-
| Belgium | BE | BIS | Person | Belgian Number for Foreigners
|
|
32
|
+
| Country | Code | Name | Group | Meaning |
|
|
33
|
+
| ---------------------- | ---- | --------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
34
|
+
| Andorra | AD | NRT | Tax | Tax Register Identifier (Número de Registre Tributari) |
|
|
35
|
+
| Albania | AL | NIPT | Vat | Albanian Vat Identifier (Numri i Identifikimit për Personin e Tatueshëm) |
|
|
36
|
+
| Argentina | AR | CBU | Bank | Single Banking Code (Clave Bancaria Uniforme) |
|
|
37
|
+
| Argentina | AR | CUIT | Tax | Unique Tax Identification Code (Código Único de Identificación Tributaria) |
|
|
38
|
+
| Argentina | AR | DNI | Person | National Identity Document (Documento Nacional de Identidad) |
|
|
39
|
+
| Austria | AT | Businessid | Company | Austrian Company Register Number |
|
|
40
|
+
| Austria | AT | TIN | Tax | Austrian tax identification number (Abgabenkontonummer) |
|
|
41
|
+
| Austria | AT | UID | VAT | Austrian VAT number (Umsatzsteuer-Identifikationsnummer) |
|
|
42
|
+
| Austria | AT | VNR | Person | Austrian social security number(Versicherungsnummer) |
|
|
43
|
+
| Australia | AU | ABN | Company | Australian Business Number |
|
|
44
|
+
| Australia | AU | ACN | Company | Australian Company Number |
|
|
45
|
+
| Australia | AU | TFN | Tax/Person/Company | Australian Tax File Number |
|
|
46
|
+
| Bosnia and Herzegovina | BA | JMBG | Person | Unique Master Citizen Number |
|
|
47
|
+
| Belize | BZ | TIN | Person/Company | Brazilian Tax ID () |
|
|
48
|
+
| Belgium | BE | BIS | Person | Belgian Number for Foreigners |
|
|
49
49
|
| Belgium | BE | INSZ, NISS | Person | Belgian Social Security Identification Number (Identificatienummer van de Sociale Zekerheid, Numéro d'Identification Sécurité Sociale) |
|
|
50
|
-
| Belgium | BE | NN | Person | Belgian National Number (Numéro National)
|
|
51
|
-
| Belgium | BE | VAT | Company | Belgian Enterprise Number
|
|
52
|
-
| Bulgaria | BG | EGN | Person | ЕГН, Единен граждански номер, Bulgarian personal identity codes
|
|
53
|
-
| Bulgaria | BG | PNF | Person | PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner).
|
|
54
|
-
| Bulgaria | BG | VAT | Company | Идентификационен номер по ДДС, Bulgarian VAT number
|
|
55
|
-
| Brazil | BR | CPF | Person | Brazilian identity number (Cadastro de Pessoas Físicas)
|
|
56
|
-
| Brazil | BR | CNPJ | Company | Brazilian company number (Cadastro Nacional da Pessoa Jurídica)
|
|
57
|
-
| Belarus | BY | UNP | Person/Company | Учетный номер плательщика, the Belarus VAT number
|
|
58
|
-
| Canada | CA | BN | Company | Company Identifier (Canadian Business Number)
|
|
59
|
-
| Canada | CA | SIN | Person | Person Identifier (Social Insurance Number)
|
|
60
|
-
| Cuba | CU | NI | Person | Número de identidad, Cuban identity card numbers
|
|
61
|
-
| Cyprus | CY | VAT | Company | Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number)
|
|
62
|
-
| Czech Republic | CZ | DIC | Company | Daňové identifikační číslo, Czech VAT number
|
|
63
|
-
| Czech Republic | CZ | RC | Person | Rodné číslo, the Czech birth number
|
|
64
|
-
| Swisserland | CH | SSN | Person | Swiss social security number ("Sozialversicherungsnummer")
|
|
65
|
-
| Swisserland | CH | UID | Company | Unternehmens-Identifikationsnummer, Swiss business identifier
|
|
66
|
-
| Swisserland | CH | VAT | Company | Mehrwertsteuernummer, the Swiss VAT number
|
|
67
|
-
| Chile | CL | RUT | Tax | Tax Identifier (Rol Unico Tributario) [RUN]
|
|
68
|
-
| China | CN | RIC | Person | Person Identifier (Chinese Resident Identity Card Number)
|
|
69
|
-
| China | CN | USCC | Company | Company Identifier (Unified Social Credit Code, 统一社会信用代码, China tax number)
|
|
70
|
-
| Columbia | CO | NIT | Tax | Tax Identifier (Número de Identificación Tributaria)
|
|
71
|
-
| Costa Rica | CR | CPF | Person | Person Identifier (Cédula de Persona Física)
|
|
72
|
-
| Costa Rica | CR | CPJ | Company | Company Identifier (Cédula de Persona Jurídica)
|
|
73
|
-
| Costa Rica | CR | CR | Person | Person Identifier (Cédula de Residencia)
|
|
74
|
-
| Germany | DE | IDNR | Person | Steuerliche Identifikationsnummer, German personal tax number
|
|
75
|
-
| Germany | DE |
|
|
76
|
-
| Germany | DE |
|
|
77
|
-
| Germany | DE |
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
| Dominican Republic | DO |
|
|
81
|
-
| Dominican Republic | DO |
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
| Estonia | EE |
|
|
85
|
-
| Estonia | EE |
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
| Guatemala | GT |
|
|
90
|
-
|
|
|
91
|
-
| Finland | FI |
|
|
92
|
-
| Finland | FI |
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
| Great Britain | GB |
|
|
96
|
-
| Great Britain | GB |
|
|
97
|
-
|
|
|
98
|
-
| Greece | GR |
|
|
99
|
-
|
|
|
100
|
-
| France | FR |
|
|
101
|
-
| France | FR |
|
|
102
|
-
| France | FR |
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
| Iceland | IS |
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
| Ireland | IE |
|
|
111
|
-
|
|
|
112
|
-
| India | IN |
|
|
113
|
-
|
|
|
114
|
-
| Israel | IL |
|
|
115
|
-
|
|
|
116
|
-
| Italy | IT |
|
|
117
|
-
| Italy | IT |
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
| Lithuanian | LT |
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
| South Korea | KR |
|
|
132
|
-
|
|
|
133
|
-
| Mexico | MX |
|
|
134
|
-
| Mexico | MX |
|
|
135
|
-
|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
| Netherlands | NL |
|
|
139
|
-
| Netherlands | NL |
|
|
140
|
-
|
|
|
141
|
-
| New Zealand | NZ |
|
|
142
|
-
|
|
|
143
|
-
| Norway | NO |
|
|
144
|
-
| Norway | NO |
|
|
145
|
-
| Norway | NO |
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
| Peru | PE |
|
|
149
|
-
| Peru | PE |
|
|
150
|
-
|
|
|
151
|
-
| Pakistan | PK |
|
|
152
|
-
|
|
|
153
|
-
| Poland | PL |
|
|
154
|
-
| Poland | PL |
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
|
|
|
158
|
-
| Romania | RO |
|
|
159
|
-
| Romania | RO |
|
|
160
|
-
| Romania | RO |
|
|
161
|
-
|
|
|
162
|
-
|
|
|
163
|
-
| Serbia | RS |
|
|
164
|
-
|
|
|
165
|
-
| Sweden | SE |
|
|
166
|
-
| Sweden | SE |
|
|
167
|
-
|
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
| Turkey | TR |
|
|
172
|
-
|
|
|
173
|
-
| Slovenia | SI |
|
|
174
|
-
|
|
|
175
|
-
| Slovakia | SK |
|
|
176
|
-
|
|
|
177
|
-
| Spain | ES |
|
|
178
|
-
| Spain | ES |
|
|
179
|
-
| Spain | ES |
|
|
180
|
-
|
|
|
181
|
-
| Uruguay | UY |
|
|
182
|
-
| Uruguay | UY |
|
|
183
|
-
|
|
|
184
|
-
| Ukraine | UA |
|
|
185
|
-
|
|
|
186
|
-
| United States | US |
|
|
187
|
-
|
|
|
188
|
-
|
|
|
189
|
-
|
|
|
190
|
-
| South Africa | ZA |
|
|
50
|
+
| Belgium | BE | NN | Person | Belgian National Number (Numéro National) |
|
|
51
|
+
| Belgium | BE | VAT | Company | Belgian Enterprise Number |
|
|
52
|
+
| Bulgaria | BG | EGN | Person | ЕГН, Единен граждански номер, Bulgarian personal identity codes |
|
|
53
|
+
| Bulgaria | BG | PNF | Person | PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner). |
|
|
54
|
+
| Bulgaria | BG | VAT | Company | Идентификационен номер по ДДС, Bulgarian VAT number |
|
|
55
|
+
| Brazil | BR | CPF | Person | Brazilian identity number (Cadastro de Pessoas Físicas) |
|
|
56
|
+
| Brazil | BR | CNPJ | Company | Brazilian company number (Cadastro Nacional da Pessoa Jurídica) |
|
|
57
|
+
| Belarus | BY | UNP | Person/Company | Учетный номер плательщика, the Belarus VAT number |
|
|
58
|
+
| Canada | CA | BN | Company | Company Identifier (Canadian Business Number) |
|
|
59
|
+
| Canada | CA | SIN | Person | Person Identifier (Social Insurance Number) |
|
|
60
|
+
| Cuba | CU | NI | Person | Número de identidad, Cuban identity card numbers |
|
|
61
|
+
| Cyprus | CY | VAT | Company | Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) |
|
|
62
|
+
| Czech Republic | CZ | DIC | Company | Daňové identifikační číslo, Czech VAT number |
|
|
63
|
+
| Czech Republic | CZ | RC | Person | Rodné číslo, the Czech birth number |
|
|
64
|
+
| Swisserland | CH | SSN | Person | Swiss social security number ("Sozialversicherungsnummer") |
|
|
65
|
+
| Swisserland | CH | UID | Company | Unternehmens-Identifikationsnummer, Swiss business identifier |
|
|
66
|
+
| Swisserland | CH | VAT | Company | Mehrwertsteuernummer, the Swiss VAT number |
|
|
67
|
+
| Chile | CL | RUT | Tax | Tax Identifier (Rol Unico Tributario) [RUN] |
|
|
68
|
+
| China | CN | RIC | Person | Person Identifier (Chinese Resident Identity Card Number) |
|
|
69
|
+
| China | CN | USCC | Company | Company Identifier (Unified Social Credit Code, 统一社会信用代码, China tax number) |
|
|
70
|
+
| Columbia | CO | NIT | Tax | Tax Identifier (Número de Identificación Tributaria) |
|
|
71
|
+
| Costa Rica | CR | CPF | Person | Person Identifier (Cédula de Persona Física) |
|
|
72
|
+
| Costa Rica | CR | CPJ | Company | Company Identifier (Cédula de Persona Jurídica) |
|
|
73
|
+
| Costa Rica | CR | CR | Person | Person Identifier (Cédula de Residencia) |
|
|
74
|
+
| Germany | DE | IDNR | Person | Steuerliche Identifikationsnummer, German personal tax number |
|
|
75
|
+
| Germany | DE | Passport | Person | Passport Number |
|
|
76
|
+
| Germany | DE | STNR | Company | Steuernummer, German tax number |
|
|
77
|
+
| Germany | DE | SVNR | Person | Sozialversicherungsnummer, German social security / pension insurance number number |
|
|
78
|
+
| Germany | DE | VAT | Company | Vat identifier |
|
|
79
|
+
| Denmark | DK | VAT | Company | Momsregistreringsnummer, Danish VAT number |
|
|
80
|
+
| Dominican Republic | DO | CEDULA | Person | Person Identifier (Cédula de Residencia) |
|
|
81
|
+
| Dominican Republic | DO | NCF | Vat | Tax Receipt Number (Números de Comprobante Fiscal) |
|
|
82
|
+
| Dominican Republic | DO | RNC | Tax | Person Identifier (Registro Nacional del Contribuyente) |
|
|
83
|
+
| Ecuador | EC | CI | Person | Ecuadorian person identifier (Cédula de identidad) |
|
|
84
|
+
| Estonia | EE | IK | Person | Isikukood (Estonian Personcal ID number). |
|
|
85
|
+
| Estonia | EE | KMKR | Company | KMKR (Käibemaksukohuslase, Estonian VAT number) |
|
|
86
|
+
| Estonia | EE | Registrikood | Company | Registrikood (Estonian organisation registration code) |
|
|
87
|
+
| Ecuador | EC | RUC | Tax/Vat | Ecuadorian company tax number (Registro Único de Contribuyentes) |
|
|
88
|
+
| El Salvador | SV | NIT | Tax | Tax Identifier (Número de Identificación Tributaria) |
|
|
89
|
+
| Guatemala | GT | CUI | Person | Guatemala person (Código Único de Identificación) |
|
|
90
|
+
| Guatemala | GT | NIT | Company | Guatemala company tax number (Número de Identificación Tributaria) |
|
|
91
|
+
| Finland | FI | ALV | Company | ALV nro (Arvonlisäveronumero, Finnish VAT number) |
|
|
92
|
+
| Finland | FI | HETU | Person | HETU (Henkilötunnus, Finnish personal identity code) |
|
|
93
|
+
| Finland | FI | YTUNNUS | Company | Y-tunnus (Finnish business identifier) |
|
|
94
|
+
| France | FR | NIF | Person | NIF (Numéro d'Immatriculation Fiscale, French tax identification number) |
|
|
95
|
+
| Great Britain | GB | NINO | Person | NINO (United Kingdom National Insurance Number) |
|
|
96
|
+
| Great Britain | GB | UTR | Person | UTR (United Kingdom Unique Taxpayer Reference) |
|
|
97
|
+
| Great Britain | GB | VAT | Company | VAT (United Kingdom (and Isle of Man) VAT registration number) |
|
|
98
|
+
| Greece | GR | AMKA | Company | AMKA (Αριθμός Μητρώου Κοινωνικής Ασφάλισης, Greek social security number) |
|
|
99
|
+
| Greece | GR | VAT | Company | FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) |
|
|
100
|
+
| France | FR | NIR | Person | NIR (French personal identification number) |
|
|
101
|
+
| France | FR | SIREN | Company | SIREN (a French company identification number) |
|
|
102
|
+
| France | FR | SIRET | Company | SIRET (a French company establishment identification number) |
|
|
103
|
+
| France | FR | TVA | Vat | VAT Identifier |
|
|
104
|
+
| Croatia | HR | OIB | Person | Osobni identifikacijski broj, Croatian identification number |
|
|
105
|
+
| Hong Kong | HK | HKID | Person | Hong Kong Identity Card |
|
|
106
|
+
| Hungaria | HU | ANUM | Vat | ANUM (Közösségi adószám, Hungarian VAT number) |
|
|
107
|
+
| Iceland | IS | KENNITALA | Person/Company | Icelandic personal and organisation identity code |
|
|
108
|
+
| Iceland | IS | VSK | Vat | Virðisaukaskattsnúmer, Icelandic VAT number |
|
|
109
|
+
| Indonesia | ID | NPWP | Person/Company | NPWP (Nomor Pokok Wajib Pajak, Indonesian VAT Number). |
|
|
110
|
+
| Ireland | IE | PPS | Person | Personal Public Service Number, Irish personal number |
|
|
111
|
+
| Ireland | IE | VAT | Tax/Vat | Ireland Value Added Tax ID |
|
|
112
|
+
| India | IN | AADHAAR | Company | Indian digital resident personal identity number |
|
|
113
|
+
| India | IN | PAN | Person | Permanent Account Number, Indian income tax identifier |
|
|
114
|
+
| Israel | IL | IDNR | Person | Identity Number (Mispar Zehut, מספר זהות, Israeli identity number) |
|
|
115
|
+
| Israel | IL | HR | Company | Company Number (מספר חברה, or short ח.פ. Israeli company number) |
|
|
116
|
+
| Italy | IT | AIC | Drug | Italian code for identification of drugs |
|
|
117
|
+
| Italy | IT | CODICEFISCALE | Person | Codice Fiscale (Italian tax code for individuals) |
|
|
118
|
+
| Italy | IT | IVA | Vat | Partita IVA (Italian VAT number) |
|
|
119
|
+
| Liechtenstein | LI | PEID | Person/Company | Personenidentifikationsnummer |
|
|
120
|
+
| Lithuanian | LT | ASMENS | Person | Asmens kodas (Person Number) |
|
|
121
|
+
| Lithuanian | LT | PVM | Vat | Pridėtinės vertės mokestis mokėtojo kodas |
|
|
122
|
+
| Luxembourgian | LU | TVA | Vat | taxe sur la valeur ajoutée |
|
|
123
|
+
| Latvian | LV | PVN | Person/Vat | Pievienotās vērtības nodokļa |
|
|
124
|
+
| Morocco | MA | ICE | Company | Identifiant Commun de l'Entreprise, Moroccan new registration number |
|
|
125
|
+
| Macedonia | MK | JMBG | Person | Unique Master Citizen Number (Единствен матичен број на граѓанинот) |
|
|
126
|
+
| Monaco | MC | TVA | Vat | taxe sur la valeur ajoutée, Monacan VAT number |
|
|
127
|
+
| Moldavia | MD | IDNO | Vat | Moldavian VAT number |
|
|
128
|
+
| Malta | MT | VAT | Vat | Maltese VAT number |
|
|
129
|
+
| Mauritius | MU | NID | Person | ID number (Mauritian national identifier) |
|
|
130
|
+
| Japan | JP | CN | Company | 法人番号, hōjin bangō, Japanese Corporate Number |
|
|
131
|
+
| South Korea | KR | BRN | Company | 사업자 등록 번호, South Korea Business Registration Number) |
|
|
132
|
+
| South Korea | KR | RRN | Person | South Korean resident registration number |
|
|
133
|
+
| Mexico | MX | RFC | Tax/Vat | Tax Identifier (Registro Federal de Contribuyentes) |
|
|
134
|
+
| Mexico | MX | CURP | Person | Individual Identifier (Clave Única de Registro de Población) |
|
|
135
|
+
| Mexico | MX | CLABE | Bank | Bank Account (Clave Bancaria Estandarizada) |
|
|
136
|
+
| Montenegro | ME | JMBG | Person | Unique Master Citizen Number |
|
|
137
|
+
| Malaysia | MY | NRIC | Person | Malaysian National Registration Identity Card Number |
|
|
138
|
+
| Netherlands | NL | BSN | Person | Burgerservicenummer, the Dutch citizen identification number |
|
|
139
|
+
| Netherlands | NL | BTW | Vat | Btw-identificatienummer (Omzetbelastingnummer, the Dutch VAT number) |
|
|
140
|
+
| Netherlands | NL | Onderwijsnummer | Person | Onderwijsnummer (the Dutch student identification number) |
|
|
141
|
+
| New Zealand | NZ | IRD | Person/Company | New Zealand Inland Revenue Department (Te Tari Tāke) number |
|
|
142
|
+
| New Zealand | NZ | BANK | Bank | New Zealand Bank Account numbers - checkdigit |
|
|
143
|
+
| Norway | NO | Fodsels | Person | Fødselsnummer (Norwegian birth number, the national identity number) |
|
|
144
|
+
| Norway | NO | Konto | Bank | Konto nr. (Norwegian bank account number) |
|
|
145
|
+
| Norway | NO | MVA | Vat | Merverdiavgift, Norwegian VAT number |
|
|
146
|
+
| Norway | NO | Orgnr | Company | Organisasjonsnummer, Norwegian organisation number |
|
|
147
|
+
| Paraguay | PY | RUC | Tax/Vat | Tax Identifier (Registro Único de Contribuyentes) |
|
|
148
|
+
| Peru | PE | CUI | Person | Person Identifier (Cédula Única de Identidad) |
|
|
149
|
+
| Peru | PE | RUC | Tax/Vat | Tax Identifier (Registro Único de Contribuyentes) |
|
|
150
|
+
| Peru | PE | CE | Person | Person Identifier (Carné de Extranjería) |
|
|
151
|
+
| Pakistan | PK | CNIC | Person | National Identity Card |
|
|
152
|
+
| Pakistan | PK | NTN | Company | Tax Identification Number |
|
|
153
|
+
| Poland | PL | NIP | Vat | Numer Identyfikacji Podatkowej, Polish VAT number |
|
|
154
|
+
| Poland | PL | PESEL | Person | Polish national identification number |
|
|
155
|
+
| Poland | PL | REGON | Company | Rejestr Gospodarki Narodowej, Polish register of economic units |
|
|
156
|
+
| Portugual | PT | NIF | Vat | Número de identificação fiscal, Portuguese VAT number |
|
|
157
|
+
| Russia | RU | INN | Tax/Vat | Tax Identifier (Идентификационный номер налогоплательщика) |
|
|
158
|
+
| Romania | RO | CF | Vat | Cod de înregistrare în scopuri de TVA, Romanian VAT number |
|
|
159
|
+
| Romania | RO | CNP | Person | Cod Numeric Personal, Romanian Numerical Personal Code) |
|
|
160
|
+
| Romania | RO | CUI | Tax | Codul Unic de Înregistrare, Romanian company identifier |
|
|
161
|
+
| Romania | RO | ONRC | Company | Ordine din Registrul Comerţului, Romanian Trade Register identifier |
|
|
162
|
+
| San Marcos | SM | COE | Company | Codice operatore economico, San Marino national tax number |
|
|
163
|
+
| Serbia | RS | PIB | Vat | Poreski identifikacioni broj Tax identification number |
|
|
164
|
+
| Serbia | RS | JMBG | Person | Unique Master Citizen Number (Jedinstveni matični broj građana) |
|
|
165
|
+
| Sweden | SE | ORGNR | Company | Organisationsnummer, Swedish company number |
|
|
166
|
+
| Sweden | SE | PERSONNUMMER | Person | Personnummer (Swedish personal identity number) |
|
|
167
|
+
| Sweden | SE | VAT | Vat | VAT (Moms, Mervärdesskatt, Swedish VAT number) |
|
|
168
|
+
| Singapore | SG | UEN | Company | Singapore's Unique Entity Number |
|
|
169
|
+
| Thailand | TH | IDNR | Person | Thai National ID (บัตรประจำตัวประชาชนไทย) |
|
|
170
|
+
| Taiwan | TW | UBN | Company | Unified Business Number, 統一編號, Taiwanese tax number |
|
|
171
|
+
| Turkey | TR | TCKIMLIK | Person | Türkiye Cumhuriyeti Kimlik Numarası (Personal ID) |
|
|
172
|
+
| Turkey | TR | VKN | Tax | Vergi Kimlik Numarası, Turkish tax identification number |
|
|
173
|
+
| Slovenia | SI | DDV | Vat | ID za DDV (Davčna številka, Slovenian VAT number) |
|
|
174
|
+
| Slovenia | SI | JMBG | Person | Unique Master Citizen Number (Enotna matična številka občana) |
|
|
175
|
+
| Slovakia | SK | DPH | Vat | IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) |
|
|
176
|
+
| Slovakia | SK | RC | Person | RČ (Rodné číslo, the Slovak birth number) |
|
|
177
|
+
| Spain | ES | CIF | Tax/Vat | Tax Identifier (Código de Identificación Fiscal) |
|
|
178
|
+
| Spain | ES | DNI | Person | Identity code (Documento Nacional de Identidad) |
|
|
179
|
+
| Spain | ES | NIE | Person | Identity code foreigner (Número de Identificación de Extranjero) |
|
|
180
|
+
| Spain | ES | NIF | Tax | Tax Identifier (Número de Identificación Fiscal) |
|
|
181
|
+
| Uruguay | UY | RUT | Tax/Vat | Tax Identifier (Registro Único Tributario) |
|
|
182
|
+
| Uruguay | UY | CEDULA | Person | Person Identifier (Cédula de Residencia) |
|
|
183
|
+
| Uruguay | UY | NIE | Person | ForeignersI identification Number |
|
|
184
|
+
| Ukraine | UA | RNTRC | Person | КПП, RNTRC (Individual taxpayer registration number in Ukraine) |
|
|
185
|
+
| Ukraine | UA | EDRPOU | Company | ЄДРПОУ, EDRPOU (Identifier for enterprises and organizations in Ukraine) |
|
|
186
|
+
| United States | US | EIN | Tax/Company | Tax Identifier (Employer Identification Number) |
|
|
187
|
+
| United States | US | SSN | Tax/Individual | Tax Identifier (Social Security Number) |
|
|
188
|
+
| Venezuelan | VE | RIF | Vat | Vat Identifier (Registro de Identificación Fiscal) |
|
|
189
|
+
| Vietnam | VN | MST | Company | Mã số thuế, Vietnam tax number |
|
|
190
|
+
| South Africa | ZA | IDNR | Person | ID number (South African Identity Document number). |
|
|
191
|
+
| South Africa | ZA | TIN | Person/Company | TIN (South African Tax Identification Number). |
|
|
191
192
|
|
|
192
193
|
### Examples
|
|
193
194
|
|
|
@@ -205,8 +206,8 @@ https://wiki.scn.sap.com/wiki/display/CRM/Country+Tax+Category+check
|
|
|
205
206
|
### Release Notes
|
|
206
207
|
|
|
207
208
|
This project is now using https://github.com/semantic-release/semantic-release to manage the
|
|
208
|
-
release process.
|
|
209
|
+
release process. Commit messages should use the format specified to handle the major/minor/patch
|
|
209
210
|
versioning information.
|
|
210
211
|
|
|
211
212
|
This is based on the angular commit message format
|
|
212
|
-
|
|
213
|
+
https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-format
|
package/lib/cjs/de/index.d.ts
CHANGED
package/lib/cjs/de/index.js
CHANGED
|
@@ -23,10 +23,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.vat = exports.svnr = exports.stnr = exports.pwnr = exports.idnr = void 0;
|
|
26
|
+
exports.passport = exports.vat = exports.svnr = exports.stnr = exports.pwnr = exports.idnr = void 0;
|
|
27
27
|
exports.idnr = __importStar(require("./idnr"));
|
|
28
28
|
exports.pwnr = __importStar(require("./pwnr"));
|
|
29
29
|
exports.stnr = __importStar(require("./stnr"));
|
|
30
30
|
exports.svnr = __importStar(require("./svnr"));
|
|
31
31
|
exports.vat = __importStar(require("./vat"));
|
|
32
|
-
|
|
32
|
+
exports.passport = __importStar(require("./passport"));
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBK0I7QUFDL0IsK0NBQStCO0FBQy9CLCtDQUErQjtBQUMvQiwrQ0FBK0I7QUFDL0IsNkNBQTZCO0FBQzdCLHVEQUF1QyJ9
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.compact = exports.format = exports.validate = exports.abbreviation = exports.localName = exports.name = void 0;
|
|
27
|
+
const exceptions = __importStar(require("../exceptions"));
|
|
28
|
+
const util_1 = require("../util");
|
|
29
|
+
function clean(input) {
|
|
30
|
+
return util_1.strings.cleanUnicode(input, ' -./,');
|
|
31
|
+
}
|
|
32
|
+
const idRegexp = /([CFGHJK][0-9CFGHJKLMNPRTVWXYZ]{8})([0-9]?)[A-Z]?/;
|
|
33
|
+
const impl = {
|
|
34
|
+
name: 'German Passport Number',
|
|
35
|
+
localName: 'Ausweisen',
|
|
36
|
+
abbreviation: 'Passport',
|
|
37
|
+
compact(input) {
|
|
38
|
+
const [value, err] = clean(input);
|
|
39
|
+
if (err) {
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
},
|
|
44
|
+
format(input) {
|
|
45
|
+
const [value] = clean(input);
|
|
46
|
+
return value;
|
|
47
|
+
},
|
|
48
|
+
validate(input) {
|
|
49
|
+
const [value, error] = clean(input);
|
|
50
|
+
if (error) {
|
|
51
|
+
return { isValid: false, error };
|
|
52
|
+
}
|
|
53
|
+
if (value.length < 9 || value.length > 11) {
|
|
54
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
55
|
+
}
|
|
56
|
+
const match = value.match(idRegexp);
|
|
57
|
+
if (!match) {
|
|
58
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
59
|
+
}
|
|
60
|
+
if (match[2] !== '') {
|
|
61
|
+
const [issue, issueCheck] = [match[1], match[2]];
|
|
62
|
+
const issueSum = (0, util_1.weightedSum)(issue, {
|
|
63
|
+
weights: [7, 3, 1],
|
|
64
|
+
modulus: 10,
|
|
65
|
+
});
|
|
66
|
+
if (String(issueSum) !== issueCheck) {
|
|
67
|
+
return {
|
|
68
|
+
isValid: false,
|
|
69
|
+
error: new exceptions.InvalidChecksum('issue.checksum'),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
isValid: true,
|
|
75
|
+
compact: value,
|
|
76
|
+
isIndividual: true,
|
|
77
|
+
isCompany: false,
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
exports.name = impl.name, exports.localName = impl.localName, exports.abbreviation = impl.abbreviation, exports.validate = impl.validate, exports.format = impl.format, exports.compact = impl.compact;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGUvcGFzc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSwwREFBNEM7QUFDNUMsa0NBQStDO0FBRy9DLFNBQVMsS0FBSyxDQUFDLEtBQWE7SUFDMUIsT0FBTyxjQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQUcsbURBQW1ELENBQUM7QUFFckUsTUFBTSxJQUFJLEdBQWM7SUFDdEIsSUFBSSxFQUFFLHdCQUF3QjtJQUM5QixTQUFTLEVBQUUsV0FBVztJQUN0QixZQUFZLEVBQUUsVUFBVTtJQUV4QixPQUFPLENBQUMsS0FBYTtRQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRTtZQUNQLE1BQU0sR0FBRyxDQUFDO1NBQ1g7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDbEM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1NBQ2xFO1FBQ0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7U0FDbEU7UUFHRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqRCxNQUFNLFFBQVEsR0FBRyxJQUFBLGtCQUFXLEVBQUMsS0FBSyxFQUFFO2dCQUNsQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFDLENBQUM7WUFFSCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxVQUFVLEVBQUU7Z0JBQ25DLE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDeEQsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVhLFlBQUksR0FDakIsSUFBSSxPQURlLGlCQUFTLEdBQzVCLElBQUksWUFEMEIsb0JBQVksR0FDMUMsSUFBSSxlQUR3QyxnQkFBUSxHQUNwRCxJQUFJLFdBRGtELGNBQU0sR0FDNUQsSUFBSSxTQUQwRCxlQUFPLEdBQ3JFLElBQUksU0FBQyJ9
|
package/lib/cjs/de/pwnr.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { ValidateReturn } from '../types';
|
|
2
|
+
export declare function validateIssue(value: string): ValidateReturn;
|
|
3
|
+
export declare function validateNew(value: string): ValidateReturn;
|
|
2
4
|
export declare const name: string, localName: string, abbreviation: string | undefined, validate: (value: string) => ValidateReturn, format: (value: string) => string, compact: (value: string) => string;
|
package/lib/cjs/de/pwnr.js
CHANGED
|
@@ -23,20 +23,110 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.compact = exports.format = exports.validate = exports.abbreviation = exports.localName = exports.name = void 0;
|
|
26
|
+
exports.compact = exports.format = exports.validate = exports.abbreviation = exports.localName = exports.name = exports.validateNew = exports.validateIssue = void 0;
|
|
27
27
|
const exceptions = __importStar(require("../exceptions"));
|
|
28
28
|
const util_1 = require("../util");
|
|
29
|
+
const oldRegex = /^([0-9CFGHJKLMNPRTVWXYZ]{9})([0-9])[A-Z]?$/;
|
|
29
30
|
function clean(input) {
|
|
30
31
|
const [value, err] = util_1.strings.cleanUnicode(input, ' -./,');
|
|
31
32
|
if (err) {
|
|
32
33
|
return [value, err];
|
|
33
34
|
}
|
|
34
|
-
if (/[A-Z]/.test(value[10])) {
|
|
35
|
+
if (value.length >= 25 && /[A-Z]/.test(value[10])) {
|
|
35
36
|
const [p1, p2, p3, p4] = util_1.strings.splitAt(value, 10, 11, 25);
|
|
36
37
|
return [p1 + p3 + p2 + p4, err];
|
|
37
38
|
}
|
|
38
39
|
return [value, err];
|
|
39
40
|
}
|
|
41
|
+
function validateIssue(value) {
|
|
42
|
+
const match = value.match(oldRegex);
|
|
43
|
+
if (!match) {
|
|
44
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
45
|
+
}
|
|
46
|
+
const [issue, issueCheck] = [match[1], match[2]];
|
|
47
|
+
const issueSum = (0, util_1.weightedSum)(issue, {
|
|
48
|
+
weights: [7, 3, 1],
|
|
49
|
+
modulus: 10,
|
|
50
|
+
});
|
|
51
|
+
if (String(issueSum) !== issueCheck) {
|
|
52
|
+
return {
|
|
53
|
+
isValid: false,
|
|
54
|
+
error: new exceptions.InvalidChecksum('issue.checksum'),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
isValid: true,
|
|
59
|
+
compact: value,
|
|
60
|
+
isIndividual: true,
|
|
61
|
+
isCompany: false,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.validateIssue = validateIssue;
|
|
65
|
+
function validateNew(value) {
|
|
66
|
+
if (!/^[0-9CFGHJKLMNPRTVWXYZ][0-9CFGHJKLMNPRTVWXYZ]+[A-Z][0-9]$/.test(value)) {
|
|
67
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
68
|
+
}
|
|
69
|
+
const [issue, issueCheck, birth, birthCheck, expiry, expiryCheck, nationality, checksum,] = util_1.strings.splitAt(value, 9, 10, 16, 17, 23, 24, 25);
|
|
70
|
+
if (!(0, util_1.isValidDateCompactYYMMDD)(birth)) {
|
|
71
|
+
return {
|
|
72
|
+
isValid: false,
|
|
73
|
+
error: new exceptions.InvalidComponent('birthdate'),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (!(0, util_1.isValidDateCompactYYMMDD)(expiry)) {
|
|
77
|
+
return {
|
|
78
|
+
isValid: false,
|
|
79
|
+
error: new exceptions.InvalidComponent('expiry'),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (!/^[A-Z]$/.test(nationality)) {
|
|
83
|
+
return {
|
|
84
|
+
isValid: false,
|
|
85
|
+
error: new exceptions.InvalidComponent('nationality'),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const res = validateIssue(issue + issueCheck);
|
|
89
|
+
if (res.isValid === false) {
|
|
90
|
+
return res;
|
|
91
|
+
}
|
|
92
|
+
const birthSum = (0, util_1.weightedSum)(birth, {
|
|
93
|
+
weights: [7, 3, 1],
|
|
94
|
+
modulus: 10,
|
|
95
|
+
});
|
|
96
|
+
const expirySum = (0, util_1.weightedSum)(expiry, {
|
|
97
|
+
weights: [7, 3, 1],
|
|
98
|
+
modulus: 10,
|
|
99
|
+
});
|
|
100
|
+
if (String(birthSum) !== birthCheck) {
|
|
101
|
+
return {
|
|
102
|
+
isValid: false,
|
|
103
|
+
error: new exceptions.InvalidChecksum('birth.checksum'),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (String(expirySum) !== expiryCheck) {
|
|
107
|
+
return {
|
|
108
|
+
isValid: false,
|
|
109
|
+
error: new exceptions.InvalidChecksum('expiry.checksum'),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const sum = (0, util_1.weightedSum)(value.substring(0, 24), {
|
|
113
|
+
weights: [7, 3, 1],
|
|
114
|
+
modulus: 10,
|
|
115
|
+
});
|
|
116
|
+
if (String(sum) !== checksum) {
|
|
117
|
+
return {
|
|
118
|
+
isValid: false,
|
|
119
|
+
error: new exceptions.InvalidChecksum('checksum'),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
isValid: true,
|
|
124
|
+
compact: value,
|
|
125
|
+
isIndividual: true,
|
|
126
|
+
isCompany: false,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
exports.validateNew = validateNew;
|
|
40
130
|
const impl = {
|
|
41
131
|
name: 'German Personalausweisnummer',
|
|
42
132
|
localName: 'Personalausweisnummer',
|
|
@@ -57,80 +147,16 @@ const impl = {
|
|
|
57
147
|
if (error) {
|
|
58
148
|
return { isValid: false, error };
|
|
59
149
|
}
|
|
60
|
-
if (value.length
|
|
61
|
-
return
|
|
62
|
-
}
|
|
63
|
-
if (!/^[CFGHJKLMNPRTVWXYZ][0-9CFGHJKLMNPRTVWXYZ]+[0-9]$/) {
|
|
64
|
-
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
65
|
-
}
|
|
66
|
-
const [issue, issueCheck, birth, birthCheck, expiry, expiryCheck, nationality, checksum,] = util_1.strings.splitAt(value, 9, 10, 16, 17, 23, 24, 25);
|
|
67
|
-
console.log('GOT', value, issue, birth, expiry);
|
|
68
|
-
if (!(0, util_1.isValidDateCompactYYMMDD)(birth)) {
|
|
69
|
-
return {
|
|
70
|
-
isValid: false,
|
|
71
|
-
error: new exceptions.InvalidComponent('birthdate'),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
if (!(0, util_1.isValidDateCompactYYMMDD)(expiry)) {
|
|
75
|
-
return {
|
|
76
|
-
isValid: false,
|
|
77
|
-
error: new exceptions.InvalidComponent('expiry'),
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
if (!/^[A-Z]$/.test(nationality)) {
|
|
81
|
-
return {
|
|
82
|
-
isValid: false,
|
|
83
|
-
error: new exceptions.InvalidComponent('nationality'),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const issueSum = (0, util_1.weightedSum)(issue, {
|
|
87
|
-
weights: [7, 3, 1],
|
|
88
|
-
modulus: 10,
|
|
89
|
-
});
|
|
90
|
-
const birthSum = (0, util_1.weightedSum)(birth, {
|
|
91
|
-
weights: [7, 3, 1],
|
|
92
|
-
modulus: 10,
|
|
93
|
-
});
|
|
94
|
-
const expirySum = (0, util_1.weightedSum)(expiry, {
|
|
95
|
-
weights: [7, 3, 1],
|
|
96
|
-
modulus: 10,
|
|
97
|
-
});
|
|
98
|
-
console.log('ISSUE', issue, issueSum, issueCheck);
|
|
99
|
-
if (String(issueSum) !== issueCheck) {
|
|
100
|
-
return {
|
|
101
|
-
isValid: false,
|
|
102
|
-
error: new exceptions.InvalidChecksum('issue.checksum'),
|
|
103
|
-
};
|
|
150
|
+
if (value.length === 26) {
|
|
151
|
+
return validateNew(value);
|
|
104
152
|
}
|
|
105
|
-
if (
|
|
106
|
-
return
|
|
107
|
-
isValid: false,
|
|
108
|
-
error: new exceptions.InvalidChecksum('birth.checksum'),
|
|
109
|
-
};
|
|
153
|
+
else if (value.length === 10 || value.length === 11) {
|
|
154
|
+
return validateIssue(value);
|
|
110
155
|
}
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
isValid: false,
|
|
114
|
-
error: new exceptions.InvalidChecksum('expiry.checksum'),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
const sum = (0, util_1.weightedSum)(value.substring(0, 24), {
|
|
118
|
-
weights: [7, 3, 1],
|
|
119
|
-
modulus: 10,
|
|
120
|
-
});
|
|
121
|
-
if (String(sum) !== checksum) {
|
|
122
|
-
return {
|
|
123
|
-
isValid: false,
|
|
124
|
-
error: new exceptions.InvalidChecksum('checksum'),
|
|
125
|
-
};
|
|
156
|
+
else {
|
|
157
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
126
158
|
}
|
|
127
|
-
return {
|
|
128
|
-
isValid: true,
|
|
129
|
-
compact: value,
|
|
130
|
-
isIndividual: true,
|
|
131
|
-
isCompany: false,
|
|
132
|
-
};
|
|
133
159
|
},
|
|
134
160
|
};
|
|
135
161
|
exports.name = impl.name, exports.localName = impl.localName, exports.abbreviation = impl.abbreviation, exports.validate = impl.validate, exports.format = impl.format, exports.compact = impl.compact;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHduci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZS9wd25yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLDBEQUE0QztBQUM1QyxrQ0FBeUU7QUFHekUsTUFBTSxRQUFRLEdBQUcsNENBQTRDLENBQUM7QUFFOUQsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLGNBQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTFELElBQUksR0FBRyxFQUFFO1FBQ1AsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNyQjtJQUdELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNqRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2pDO0lBRUQsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEtBQWE7SUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENB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
|
package/lib/esm/de/index.d.ts
CHANGED
package/lib/esm/de/index.js
CHANGED
|
@@ -8,4 +8,6 @@ import * as svnr_1 from './svnr';
|
|
|
8
8
|
export { svnr_1 as svnr };
|
|
9
9
|
import * as vat_1 from './vat';
|
|
10
10
|
export { vat_1 as vat };
|
|
11
|
-
|
|
11
|
+
import * as passport_1 from './passport';
|
|
12
|
+
export { passport_1 as passport };
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IndCQUFzQixRQUFRO21CQUFsQixJQUFJO3dCQUNNLFFBQVE7bUJBQWxCLElBQUk7d0JBQ00sUUFBUTttQkFBbEIsSUFBSTt3QkFDTSxRQUFRO21CQUFsQixJQUFJO3VCQUNLLE9BQU87a0JBQWhCLEdBQUc7NEJBQ1csWUFBWTt1QkFBMUIsUUFBUSJ9
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as exceptions from '../exceptions';
|
|
2
|
+
import { strings, weightedSum } from '../util';
|
|
3
|
+
function clean(input) {
|
|
4
|
+
return strings.cleanUnicode(input, ' -./,');
|
|
5
|
+
}
|
|
6
|
+
const idRegexp = /([CFGHJK][0-9CFGHJKLMNPRTVWXYZ]{8})([0-9]?)[A-Z]?/;
|
|
7
|
+
const impl = {
|
|
8
|
+
name: 'German Passport Number',
|
|
9
|
+
localName: 'Ausweisen',
|
|
10
|
+
abbreviation: 'Passport',
|
|
11
|
+
compact(input) {
|
|
12
|
+
const [value, err] = clean(input);
|
|
13
|
+
if (err) {
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
},
|
|
18
|
+
format(input) {
|
|
19
|
+
const [value] = clean(input);
|
|
20
|
+
return value;
|
|
21
|
+
},
|
|
22
|
+
validate(input) {
|
|
23
|
+
const [value, error] = clean(input);
|
|
24
|
+
if (error) {
|
|
25
|
+
return { isValid: false, error };
|
|
26
|
+
}
|
|
27
|
+
if (value.length < 9 || value.length > 11) {
|
|
28
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
29
|
+
}
|
|
30
|
+
const match = value.match(idRegexp);
|
|
31
|
+
if (!match) {
|
|
32
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
33
|
+
}
|
|
34
|
+
if (match[2] !== '') {
|
|
35
|
+
const [issue, issueCheck] = [match[1], match[2]];
|
|
36
|
+
const issueSum = weightedSum(issue, {
|
|
37
|
+
weights: [7, 3, 1],
|
|
38
|
+
modulus: 10,
|
|
39
|
+
});
|
|
40
|
+
if (String(issueSum) !== issueCheck) {
|
|
41
|
+
return {
|
|
42
|
+
isValid: false,
|
|
43
|
+
error: new exceptions.InvalidChecksum('issue.checksum'),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
isValid: true,
|
|
49
|
+
compact: value,
|
|
50
|
+
isIndividual: true,
|
|
51
|
+
isCompany: false,
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGUvcGFzc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHL0MsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxtREFBbUQsQ0FBQztBQUVyRSxNQUFNLElBQUksR0FBYztJQUN0QixJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFlBQVksRUFBRSxVQUFVO0lBRXhCLE9BQU8sQ0FBQyxLQUFhO1FBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksR0FBRyxFQUFFO1lBQ1AsTUFBTSxHQUFHLENBQUM7U0FDWDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNsQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7WUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7U0FDbEU7UUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztTQUNsRTtRQUdELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWpELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixPQUFPLEVBQUUsRUFBRTthQUNaLENBQUMsQ0FBQztZQUVILElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtnQkFDbkMsT0FBTztvQkFDTCxPQUFPLEVBQUUsS0FBSztvQkFDZCxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2lCQUN4RCxDQUFDO2FBQ0g7U0FDRjtRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxLQUFLO1lBQ2QsWUFBWSxFQUFFLElBQUk7WUFDbEIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUN2RSxJQUFJLENBQUMifQ==
|
package/lib/esm/de/pwnr.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { ValidateReturn } from '../types';
|
|
2
|
+
export declare function validateIssue(value: string): ValidateReturn;
|
|
3
|
+
export declare function validateNew(value: string): ValidateReturn;
|
|
2
4
|
export declare const name: string, localName: string, abbreviation: string | undefined, validate: (value: string) => ValidateReturn, format: (value: string) => string, compact: (value: string) => string;
|
package/lib/esm/de/pwnr.js
CHANGED
|
@@ -1,16 +1,104 @@
|
|
|
1
1
|
import * as exceptions from '../exceptions';
|
|
2
2
|
import { strings, isValidDateCompactYYMMDD, weightedSum } from '../util';
|
|
3
|
+
const oldRegex = /^([0-9CFGHJKLMNPRTVWXYZ]{9})([0-9])[A-Z]?$/;
|
|
3
4
|
function clean(input) {
|
|
4
5
|
const [value, err] = strings.cleanUnicode(input, ' -./,');
|
|
5
6
|
if (err) {
|
|
6
7
|
return [value, err];
|
|
7
8
|
}
|
|
8
|
-
if (/[A-Z]/.test(value[10])) {
|
|
9
|
+
if (value.length >= 25 && /[A-Z]/.test(value[10])) {
|
|
9
10
|
const [p1, p2, p3, p4] = strings.splitAt(value, 10, 11, 25);
|
|
10
11
|
return [p1 + p3 + p2 + p4, err];
|
|
11
12
|
}
|
|
12
13
|
return [value, err];
|
|
13
14
|
}
|
|
15
|
+
export function validateIssue(value) {
|
|
16
|
+
const match = value.match(oldRegex);
|
|
17
|
+
if (!match) {
|
|
18
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
19
|
+
}
|
|
20
|
+
const [issue, issueCheck] = [match[1], match[2]];
|
|
21
|
+
const issueSum = weightedSum(issue, {
|
|
22
|
+
weights: [7, 3, 1],
|
|
23
|
+
modulus: 10,
|
|
24
|
+
});
|
|
25
|
+
if (String(issueSum) !== issueCheck) {
|
|
26
|
+
return {
|
|
27
|
+
isValid: false,
|
|
28
|
+
error: new exceptions.InvalidChecksum('issue.checksum'),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
isValid: true,
|
|
33
|
+
compact: value,
|
|
34
|
+
isIndividual: true,
|
|
35
|
+
isCompany: false,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function validateNew(value) {
|
|
39
|
+
if (!/^[0-9CFGHJKLMNPRTVWXYZ][0-9CFGHJKLMNPRTVWXYZ]+[A-Z][0-9]$/.test(value)) {
|
|
40
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
41
|
+
}
|
|
42
|
+
const [issue, issueCheck, birth, birthCheck, expiry, expiryCheck, nationality, checksum,] = strings.splitAt(value, 9, 10, 16, 17, 23, 24, 25);
|
|
43
|
+
if (!isValidDateCompactYYMMDD(birth)) {
|
|
44
|
+
return {
|
|
45
|
+
isValid: false,
|
|
46
|
+
error: new exceptions.InvalidComponent('birthdate'),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (!isValidDateCompactYYMMDD(expiry)) {
|
|
50
|
+
return {
|
|
51
|
+
isValid: false,
|
|
52
|
+
error: new exceptions.InvalidComponent('expiry'),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (!/^[A-Z]$/.test(nationality)) {
|
|
56
|
+
return {
|
|
57
|
+
isValid: false,
|
|
58
|
+
error: new exceptions.InvalidComponent('nationality'),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const res = validateIssue(issue + issueCheck);
|
|
62
|
+
if (res.isValid === false) {
|
|
63
|
+
return res;
|
|
64
|
+
}
|
|
65
|
+
const birthSum = weightedSum(birth, {
|
|
66
|
+
weights: [7, 3, 1],
|
|
67
|
+
modulus: 10,
|
|
68
|
+
});
|
|
69
|
+
const expirySum = weightedSum(expiry, {
|
|
70
|
+
weights: [7, 3, 1],
|
|
71
|
+
modulus: 10,
|
|
72
|
+
});
|
|
73
|
+
if (String(birthSum) !== birthCheck) {
|
|
74
|
+
return {
|
|
75
|
+
isValid: false,
|
|
76
|
+
error: new exceptions.InvalidChecksum('birth.checksum'),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (String(expirySum) !== expiryCheck) {
|
|
80
|
+
return {
|
|
81
|
+
isValid: false,
|
|
82
|
+
error: new exceptions.InvalidChecksum('expiry.checksum'),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const sum = weightedSum(value.substring(0, 24), {
|
|
86
|
+
weights: [7, 3, 1],
|
|
87
|
+
modulus: 10,
|
|
88
|
+
});
|
|
89
|
+
if (String(sum) !== checksum) {
|
|
90
|
+
return {
|
|
91
|
+
isValid: false,
|
|
92
|
+
error: new exceptions.InvalidChecksum('checksum'),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
isValid: true,
|
|
97
|
+
compact: value,
|
|
98
|
+
isIndividual: true,
|
|
99
|
+
isCompany: false,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
14
102
|
const impl = {
|
|
15
103
|
name: 'German Personalausweisnummer',
|
|
16
104
|
localName: 'Personalausweisnummer',
|
|
@@ -31,80 +119,16 @@ const impl = {
|
|
|
31
119
|
if (error) {
|
|
32
120
|
return { isValid: false, error };
|
|
33
121
|
}
|
|
34
|
-
if (value.length
|
|
35
|
-
return
|
|
36
|
-
}
|
|
37
|
-
if (!/^[CFGHJKLMNPRTVWXYZ][0-9CFGHJKLMNPRTVWXYZ]+[0-9]$/) {
|
|
38
|
-
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
39
|
-
}
|
|
40
|
-
const [issue, issueCheck, birth, birthCheck, expiry, expiryCheck, nationality, checksum,] = strings.splitAt(value, 9, 10, 16, 17, 23, 24, 25);
|
|
41
|
-
console.log('GOT', value, issue, birth, expiry);
|
|
42
|
-
if (!isValidDateCompactYYMMDD(birth)) {
|
|
43
|
-
return {
|
|
44
|
-
isValid: false,
|
|
45
|
-
error: new exceptions.InvalidComponent('birthdate'),
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (!isValidDateCompactYYMMDD(expiry)) {
|
|
49
|
-
return {
|
|
50
|
-
isValid: false,
|
|
51
|
-
error: new exceptions.InvalidComponent('expiry'),
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
if (!/^[A-Z]$/.test(nationality)) {
|
|
55
|
-
return {
|
|
56
|
-
isValid: false,
|
|
57
|
-
error: new exceptions.InvalidComponent('nationality'),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const issueSum = weightedSum(issue, {
|
|
61
|
-
weights: [7, 3, 1],
|
|
62
|
-
modulus: 10,
|
|
63
|
-
});
|
|
64
|
-
const birthSum = weightedSum(birth, {
|
|
65
|
-
weights: [7, 3, 1],
|
|
66
|
-
modulus: 10,
|
|
67
|
-
});
|
|
68
|
-
const expirySum = weightedSum(expiry, {
|
|
69
|
-
weights: [7, 3, 1],
|
|
70
|
-
modulus: 10,
|
|
71
|
-
});
|
|
72
|
-
console.log('ISSUE', issue, issueSum, issueCheck);
|
|
73
|
-
if (String(issueSum) !== issueCheck) {
|
|
74
|
-
return {
|
|
75
|
-
isValid: false,
|
|
76
|
-
error: new exceptions.InvalidChecksum('issue.checksum'),
|
|
77
|
-
};
|
|
122
|
+
if (value.length === 26) {
|
|
123
|
+
return validateNew(value);
|
|
78
124
|
}
|
|
79
|
-
if (
|
|
80
|
-
return
|
|
81
|
-
isValid: false,
|
|
82
|
-
error: new exceptions.InvalidChecksum('birth.checksum'),
|
|
83
|
-
};
|
|
125
|
+
else if (value.length === 10 || value.length === 11) {
|
|
126
|
+
return validateIssue(value);
|
|
84
127
|
}
|
|
85
|
-
|
|
86
|
-
return {
|
|
87
|
-
isValid: false,
|
|
88
|
-
error: new exceptions.InvalidChecksum('expiry.checksum'),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
const sum = weightedSum(value.substring(0, 24), {
|
|
92
|
-
weights: [7, 3, 1],
|
|
93
|
-
modulus: 10,
|
|
94
|
-
});
|
|
95
|
-
if (String(sum) !== checksum) {
|
|
96
|
-
return {
|
|
97
|
-
isValid: false,
|
|
98
|
-
error: new exceptions.InvalidChecksum('checksum'),
|
|
99
|
-
};
|
|
128
|
+
else {
|
|
129
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
100
130
|
}
|
|
101
|
-
return {
|
|
102
|
-
isValid: true,
|
|
103
|
-
compact: value,
|
|
104
|
-
isIndividual: true,
|
|
105
|
-
isCompany: false,
|
|
106
|
-
};
|
|
107
131
|
},
|
|
108
132
|
};
|
|
109
133
|
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHduci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZS9wd25yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUd6RSxNQUFNLFFBQVEsR0FBRyw0Q0FBNEMsQ0FBQztBQUU5RCxTQUFTLEtBQUssQ0FBQyxLQUFhO0lBQzFCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFMUQsSUFBSSxHQUFHLEVBQUU7UUFDUCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3JCO0lBR0QsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQ2pELE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVELE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakM7SUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWE7SUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxL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
|