Created
December 22, 2023 13:31
-
-
Save netgfx/b5eef7ddad62ced13a3b56b0d466c083 to your computer and use it in GitHub Desktop.
Stripe TaxID validation function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// code is A.I generated, use with care | |
function isValidTaxId(taxId, country) { | |
let regex; | |
switch (country) { | |
case 'US': | |
// US EIN format: 00-0000000 | |
regex = /^(\d{2}-\d{7})$/; | |
break; | |
case 'DE': | |
// German VAT format: DE000000000 | |
regex = /^(DE\d{9})$/; | |
break; | |
case 'AU': | |
// Australian Business Number (AU ABN): 12345678912 | |
regex = /^(\d{11})$/; | |
break; | |
case 'BR': | |
// Brazilian CNPJ number: 01.234.456/5432-10 | |
regex = /^(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})$/; | |
break; | |
case 'CA': | |
// Canadian BN: 123456789 | |
regex = /^(\d{9})$/; | |
break; | |
case 'CL': | |
// Chilean TIN: 12.345.678-K | |
regex = /^(\d{2}\.\d{3}\.\d{3}-[A-Z])$/; | |
break; | |
case 'CN': | |
// Chinese tax ID: 123456789012345678 | |
regex = /^(\d{18})$/; | |
break; | |
case 'EC': | |
// Ecuadorian RUC number: 1234567890001 | |
regex = /^(\d{13})$/; | |
break; | |
case 'EG': | |
// Egyptian Tax Identification Number: 123456789 | |
regex = /^(\d{9})$/; | |
break; | |
case 'HK': | |
// Hong Kong BR number: 12345678 | |
regex = /^(\d{8})$/; | |
break; | |
case 'IN': | |
// Indian GST number: 12ABCDE3456FGZH | |
regex = /^(\d{2}[A-Z]{5}\d{4}[A-Z]{1}\d{1}[A-Z]{1}\d{1})$/; | |
break; | |
case 'JP': | |
// Japanese Corporate Number (*Hōjin Bangō*): 1234567891234 | |
regex = /^(\d{13})$/; | |
break; | |
case 'LT': | |
// Lithuanian VAT: LT123456789 | |
regex = /^(LT\d{9})$/; | |
break; | |
case 'LU': | |
// Luxembourg VAT: LU12345678 | |
regex = /^(LU\d{8})$/; | |
break; | |
case 'LV': | |
// Latvian VAT: LV12345678901 | |
regex = /^(LV\d{11})$/; | |
break; | |
case 'MT': | |
// Maltese VAT: MT12345678 | |
regex = /^(MT\d{8})$/; | |
break; | |
case 'NL': | |
// Dutch VAT: NL123456789B01 | |
regex = /^(NL\d{9}B\d{2})$/; | |
break; | |
case 'PL': | |
// Polish VAT: PL1234567890 | |
regex = /^(PL\d{10})$/; | |
break; | |
case 'PT': | |
// Portuguese VAT: PT123456789 | |
regex = /^(PT\d{9})$/; | |
break; | |
case 'RO': | |
// Romanian VAT: RO1234567890 | |
regex = /^(RO\d{10})$/; | |
break; | |
case 'SE': | |
// Swedish VAT: SE123456789001 | |
regex = /^(SE\d{12})$/; | |
break; | |
case 'SI': | |
// Slovenian VAT: SI12345678 | |
regex = /^(SI\d{8})$/; | |
break; | |
case 'SK': | |
// Slovak VAT: SK1234567890 | |
regex = /^(SK\d{10})$/; | |
break; | |
case 'TR': | |
// Turkish VAT: TR1234567890 | |
regex = /^(TR\d{10})$/; | |
break; | |
case 'TW': | |
// Taiwanese VAT: TW12345678 | |
regex = /^(TW\d{8})$/; | |
break; | |
case 'UA': | |
// Ukrainian VAT: UA1234567890 | |
regex = /^(UA\d{10})$/; | |
break; | |
case 'UK': | |
// UK VAT: GB123456789 | |
regex = /^(GB\d{9})$/; | |
break; | |
case 'VN': | |
// Vietnamese VAT: VN1234567890A1 | |
regex = /^(VN\d{10}[A-Z]\d)$/; | |
break; | |
case 'AD': | |
// Andorran NRT number: A-123456-Z | |
regex = /^(A-\d{6}-[A-Z])$/; | |
break; | |
case 'AR': | |
// Argentinian tax ID number: 12-3456789-01 | |
regex = /^(\d{2}-\d{8}-\d{2})$/; | |
break; | |
case 'BE': | |
// Belgian VAT: BE0123456789 | |
regex = /^(BE\d{10})$/; | |
break; | |
case 'BO': | |
// Bolivian tax ID: 123456789 | |
regex = /^(\d{9})$/; | |
break; | |
case 'BG': | |
// Bulgarian VAT: BG123456789 | |
regex = /^(BG\d{9})$/; | |
break; | |
case 'CL': | |
// Chilean TIN: 12.345.678-K | |
regex = /^(\d{2}\.\d{3}\.\d{3}-[A-Z])$/; | |
break; | |
case 'CO': | |
// Colombian NIT number: 123.456.789-0 | |
regex = /^(\d{3}\.\d{3}\.\d{3}-\d)$/; | |
break; | |
case 'CR': | |
// Costa Rican tax ID: 1-234-567890 | |
regex = /^(\d-\d{3}-\d{6})$/; | |
break; | |
case 'HR': | |
// Croatian VAT: HR12345678912 | |
regex = /^(HR\d{11})$/; | |
break; | |
case 'CY': | |
// Cypriot VAT: CY12345678Z | |
regex = /^(CY\d{8}[A-Z])$/; | |
break; | |
case 'CZ': | |
// Czech VAT: CZ1234567890 | |
regex = /^(CZ\d{10})$/; | |
break; | |
case 'DK': | |
// Danish VAT: DK12345678 | |
regex = /^(DK\d{8})$/; | |
break; | |
case 'DO': | |
// Dominican RCN number: 123-4567890-1 | |
regex = /^(\d{3}-\d{7}-\d)$/; | |
break; | |
case 'SV': | |
// El Salvadorian NIT number: 1234-567890-123-4 | |
regex = /^(\d{4}-\d{6}-\d{3}-\d)$/; | |
break; | |
case 'EE': | |
// Estonian VAT: EE123456789 | |
regex = /^(EE\d{9})$/; | |
break; | |
case 'FI': | |
// Finnish VAT: FI12345678 | |
regex = /^(FI\d{8})$/; | |
break; | |
case 'FR': | |
// French VAT: FRAB123456789 | |
regex = /^(FR[A-Z]{2}\d{9})$/; | |
break; | |
case 'GE': | |
// Georgian VAT: 123456789 | |
regex = /^(\d{9})$/; | |
break; | |
case 'GR': | |
// Greek VAT: EL123456789 | |
regex = /^(EL\d{9})$/; | |
break; | |
case 'HU': | |
// Hungarian VAT: HU12345678 | |
regex = /^(HU\d{8})$/; | |
break; | |
case 'IS': | |
// Icelandic VAT: 123456 | |
regex = /^(\d{6})$/; | |
break; | |
case 'ID': | |
// Indonesian NPWP number: 12.345.678.9-012.345 | |
regex = /^(\d{2}\.\d{3}\.\d{3}\.\d-\d{3}\.\d{3})$/; | |
break; | |
case 'IE': | |
// Irish VAT: IE1234567AB | |
regex = /^(IE\d{7}[A-Z]{1,2})$/; | |
break; | |
case 'IT': | |
// Italian VAT: IT12345678912 | |
regex = /^(IT\d{11})$/; | |
break; | |
case 'LV': | |
// Latvian VAT: LV12345678901 | |
regex = /^(LV\d{11})$/; | |
break; | |
case 'LT': | |
// Lithuanian VAT: LT123456789 | |
regex = /^(LT\d{9})$/; | |
break; | |
case 'LU': | |
// Luxembourg VAT: LU12345678 | |
regex = /^(LU\d{8})$/; | |
break; | |
case 'MY': | |
// Malaysian Service Tax: 12345678912 | |
regex = /^(\d{11})$/; | |
break; | |
case 'MT': | |
// Maltese VAT: MT12345678 | |
regex = /^(MT\d{8})$/; | |
break; | |
case 'MX': | |
// Mexican VAT: MX1234567890 | |
regex = /^(MX\d{10})$/; | |
break; | |
case 'NL': | |
// Dutch VAT: NL123456789B01 | |
regex = /^(NL\d{9}B\d{2})$/; | |
break; | |
case 'NZ': | |
// New Zealand GST: 12345678912 | |
regex = /^(\d{11})$/; | |
break; | |
case 'NO': | |
// Norwegian VAT: NO123456789 | |
regex = /^(NO\d{9})$/; | |
break; | |
case 'PL': | |
// Polish VAT: PL1234567890 | |
regex = /^(PL\d{10})$/; | |
break; | |
case 'PT': | |
// Portuguese VAT: PT123456789 | |
regex = /^(PT\d{9})$/; | |
break; | |
case 'RO': | |
// Romanian VAT: RO1234567890 | |
regex = /^(RO\d{10})$/; | |
break; | |
case 'SA': | |
// Saudi Arabian VAT: 1234567890 | |
regex = /^(\d{10})$/; | |
break; | |
case 'SG': | |
// Singaporean GST: 12345678912 | |
regex = /^(\d{11})$/; | |
break; | |
case 'SK': | |
// Slovak VAT: SK1234567890 | |
regex = /^(SK\d{10})$/; | |
break; | |
case 'SI': | |
// Slovenian VAT: SI12345678 | |
regex = /^(SI\d{8})$/; | |
break; | |
case 'ZA': | |
// South African VAT: 1234567890 | |
regex = /^(\d{10})$/; | |
break; | |
case 'KR': | |
// South Korean VAT: 1234567890 | |
regex = /^(\d{10})$/; | |
break; | |
case 'ES': | |
// Spanish VAT: ES12345678Z | |
regex = /^(ES\d{8}[A-Z])$/; | |
break; | |
case 'SE': | |
// Swedish VAT: SE123456789001 | |
regex = /^(SE\d{12})$/; | |
break; | |
case 'CH': | |
// Swiss VAT: CHE123456789 | |
regex = /^(CHE\d{9})$/; | |
break; | |
case 'TH': | |
// Thai VAT: 1234567890123 | |
regex = /^(\d{13})$/; | |
break; | |
case 'TR': | |
// Turkish VAT: TR1234567890 | |
regex = /^(TR\d{10})$/; | |
break; | |
case 'AE': | |
// UAE VAT: 123456789012345 | |
regex = /^(\d{15})$/; | |
break; | |
default: | |
return false; | |
} | |
return regex.test(taxId); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment