// 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); }