zod-ir 1.3.2 → 1.4.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/LICENSE +1 -1
- package/README.md +59 -42
- package/dist/index.d.mts +40 -10
- package/dist/index.d.ts +40 -10
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -11
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/data.ts","../src/utils.ts","../src/constants.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n isMelliCode,\n isShenaseMelli,\n isPassport,\n isCardNumber,\n isIranianMobile,\n isSheba,\n isPostalCode,\n isLandline,\n verifyAndNormalize,\n getBankInfo,\n getMobileOperator,\n} from \"./utils\";\nimport { getMessage, BaseOptions } from \"./constants\";\n\nexport const zMelliCode = (options?: BaseOptions) =>\n z.string().refine((val) => isMelliCode(val), {\n message: getMessage(\"melliCode\", options),\n });\n\nexport const zShenaseMelli = (options?: BaseOptions) =>\n z.string().refine((val) => isShenaseMelli(val), {\n message: getMessage(\"shenaseMelli\", options),\n });\n\nexport const zPassport = (options?: BaseOptions) =>\n z.string().refine((val) => isPassport(val), {\n message: getMessage(\"passport\", options),\n });\n\nexport const zCardNumber = (options?: BaseOptions) =>\n z.string().refine((val) => isCardNumber(val), {\n message: getMessage(\"cardNumber\", options),\n });\n\ninterface MobileOptions extends BaseOptions {\n strictZero?: boolean | \"optional\";\n}\n\nexport const zIranianMobile = (options?: MobileOptions) =>\n z\n .string()\n .refine(\n (val) => isIranianMobile(val, { strictZero: options?.strictZero }),\n {\n message: getMessage(\"mobile\", options),\n }\n );\n\nexport const zSheba = (options?: BaseOptions) =>\n z.string().refine((val) => isSheba(val), {\n message: getMessage(\"sheba\", options),\n });\n\nexport const zPostalCode = (options?: BaseOptions) =>\n z.string().refine((val) => isPostalCode(val), {\n message: getMessage(\"postalCode\", options),\n });\n\nexport const zLandline = (options?: BaseOptions) =>\n z.string().refine((val) => isLandline(val), {\n message: getMessage(\"landline\", options),\n });\n\nexport const preprocessNumber = (schema: z.ZodTypeAny) =>\n z.preprocess((val) => {\n if (typeof val === \"string\") {\n return verifyAndNormalize(val);\n }\n return val;\n }, schema);\n\nexport {\n isMelliCode,\n isShenaseMelli,\n isPassport,\n isCardNumber,\n isIranianMobile,\n isSheba,\n isPostalCode,\n isLandline,\n verifyAndNormalize,\n getBankInfo,\n getMobileOperator,\n};\n","const CDN_BANKS =\n \"https://cdn.jsdelivr.net/gh/Reza-kh80/zod-ir@main/assets/banks\";\nconst CDN_OPERATORS =\n \"https://cdn.jsdelivr.net/gh/Reza-kh80/zod-ir@main/assets/operators\";\n\nexport const BANKS = {\n \"603799\": {\n name: \"Melli\",\n label: \"ملی\",\n color: \"#EF3F3E\",\n logo: `${CDN_BANKS}/melli.svg`,\n },\n \"589210\": {\n name: \"Sepah\",\n label: \"سپه\",\n color: \"#FFC600\",\n logo: `${CDN_BANKS}/sepah.svg`,\n },\n \"627648\": {\n name: \"ToseeSaderat\",\n label: \"توسعه صادرات\",\n color: \"#EDB12C\",\n logo: `${CDN_BANKS}/tosee-saderat.svg`,\n },\n \"627961\": {\n name: \"SanatMadar\",\n label: \"صنعت و معدن\",\n color: \"#B3986D\",\n logo: `${CDN_BANKS}/sanat-madan.svg`,\n },\n \"603770\": {\n name: \"Keshavarzi\",\n label: \"کشاورزی\",\n color: \"#4E7A46\",\n logo: `${CDN_BANKS}/keshavarzi.svg`,\n },\n \"628023\": {\n name: \"Maskan\",\n label: \"مسکن\",\n color: \"#F05A23\",\n logo: `${CDN_BANKS}/maskan.svg`,\n },\n \"627760\": {\n name: \"PostBank\",\n label: \"پست بانک\",\n color: \"#00764D\",\n logo: `${CDN_BANKS}/post-bank.svg`,\n },\n \"502908\": {\n name: \"ToseeTaavon\",\n label: \"توسعه تعاون\",\n color: \"#0064A6\",\n logo: `${CDN_BANKS}/tosee-taavon.svg`,\n },\n \"627412\": {\n name: \"EghtesadNovin\",\n label: \"اقتصاد نوین\",\n color: \"#652D86\",\n logo: `${CDN_BANKS}/eghtesad-novin.svg`,\n },\n \"622106\": {\n name: \"Parsian\",\n label: \"پارسیان\",\n color: \"#B3282D\",\n logo: `${CDN_BANKS}/parsian.svg`,\n },\n \"502229\": {\n name: \"Pasargad\",\n label: \"پاسارگاد\",\n color: \"#FFC72C\",\n logo: `${CDN_BANKS}/pasargad.svg`,\n },\n \"627488\": {\n name: \"Karafarin\",\n label: \"کارآفرین\",\n color: \"#3B9C56\",\n logo: `${CDN_BANKS}/karafarin.svg`,\n },\n \"621986\": {\n name: \"Saman\",\n label: \"سامان\",\n color: \"#006DB6\",\n logo: `${CDN_BANKS}/saman.svg`,\n },\n \"639346\": {\n name: \"Sina\",\n label: \"سینا\",\n color: \"#004E8A\",\n logo: `${CDN_BANKS}/sina.svg`,\n },\n \"639607\": {\n name: \"Sarmayeh\",\n label: \"سرمایه\",\n color: \"#0077B6\",\n logo: `${CDN_BANKS}/sarmayeh.svg`,\n },\n \"636214\": {\n name: \"Ayandeh\",\n label: \"آینده\",\n color: \"#8B5F34\",\n logo: `${CDN_BANKS}/ayandeh.svg`,\n },\n \"502806\": {\n name: \"Shahr\",\n label: \"شهر\",\n color: \"#ED3438\",\n logo: `${CDN_BANKS}/shahr.svg`,\n },\n \"502938\": {\n name: \"Day\",\n label: \"دی\",\n color: \"#0099CC\",\n logo: `${CDN_BANKS}/day.svg`,\n },\n \"603769\": {\n name: \"Saderat\",\n label: \"صادرات\",\n color: \"#1A3266\",\n logo: `${CDN_BANKS}/saderat.svg`,\n },\n \"610433\": {\n name: \"Mellat\",\n label: \"ملت\",\n color: \"#D70005\",\n logo: `${CDN_BANKS}/mellat.svg`,\n },\n \"627353\": {\n name: \"Tejarat\",\n label: \"تجارت\",\n color: \"#005696\",\n logo: `${CDN_BANKS}/tejarat.svg`,\n },\n \"585983\": {\n name: \"Tejarat\",\n label: \"تجارت\",\n color: \"#005696\",\n logo: `${CDN_BANKS}/tejarat.svg`,\n },\n \"589463\": {\n name: \"Refah\",\n label: \"رفاه\",\n color: \"#2B3C8E\",\n logo: `${CDN_BANKS}/refah.svg`,\n },\n \"627381\": {\n name: \"Ansar\",\n label: \"انصار\",\n color: \"#F7B500\",\n logo: `${CDN_BANKS}/ansar.svg`,\n },\n \"505785\": {\n name: \"IranZamin\",\n label: \"ایران زمین\",\n color: \"#92278F\",\n logo: `${CDN_BANKS}/iran-zamin.svg`,\n },\n \"505416\": {\n name: \"Gardeshgari\",\n label: \"گردشگری\",\n color: \"#1D3265\",\n logo: `${CDN_BANKS}/gardeshgari.svg`,\n },\n \"636949\": {\n name: \"Hekmat\",\n label: \"حکمت\",\n color: \"#5F2C83\",\n logo: `${CDN_BANKS}/hekmat.svg`,\n },\n \"505801\": {\n name: \"Kosar\",\n label: \"کوثر\",\n color: \"#C62828\",\n logo: `${CDN_BANKS}/kosar.svg`,\n },\n \"606373\": {\n name: \"MehrIran\",\n label: \"مهر ایران\",\n color: \"#359E49\",\n logo: `${CDN_BANKS}/mehr-iran.svg`,\n },\n \"504172\": {\n name: \"Resalat\",\n label: \"رسالت\",\n color: \"#000000\",\n logo: `${CDN_BANKS}/resalat.svg`,\n },\n \"523388\": {\n name: \"Pasargad\",\n label: \"پاسارگاد (ویپاد)\",\n color: \"#FFC72C\",\n logo: `${CDN_BANKS}/pasargad.svg`,\n },\n \"505809\": {\n name: \"Khavarmianeh\",\n label: \"خاورمیانه\",\n color: \"#1F2B5B\",\n logo: `${CDN_BANKS}/khavarmianeh.svg`,\n },\n} as const;\n\nexport const MOBILE_OPERATORS = {\n MCI: {\n label: \"همراه اول\",\n logo: `${CDN_OPERATORS}/mci.svg`,\n prefixes: [\n \"0910\",\n \"0911\",\n \"0912\",\n \"0913\",\n \"0914\",\n \"0915\",\n \"0916\",\n \"0917\",\n \"0918\",\n \"0919\",\n \"0990\",\n \"0991\",\n \"0992\",\n \"0993\",\n \"0994\",\n ],\n },\n Irancell: {\n label: \"ایرانسل\",\n logo: `${CDN_OPERATORS}/irancell.svg`,\n prefixes: [\n \"0930\",\n \"0933\",\n \"0935\",\n \"0936\",\n \"0937\",\n \"0938\",\n \"0939\",\n \"0901\",\n \"0902\",\n \"0903\",\n \"0904\",\n \"0905\",\n \"0941\",\n ],\n },\n Rightel: {\n label: \"رایتل\",\n logo: `${CDN_OPERATORS}/rightel.svg`,\n prefixes: [\"0920\", \"0921\", \"0922\", \"0923\"],\n },\n Shatel: {\n label: \"شاتل موبایل\",\n logo: `${CDN_OPERATORS}/shatel.svg`,\n prefixes: [\"0998\"],\n },\n Taliya: {\n label: \"تالیا\",\n logo: `${CDN_OPERATORS}/taliya.png`,\n prefixes: [\"0932\"],\n },\n} as const;\n","import { BANKS, MOBILE_OPERATORS } from \"./data\";\n\nexport function verifyAndNormalize(value: string): string {\n if (!value) return \"\";\n const PERSIAN_ZERO = 1776;\n const PERSIAN_NINE = 1785;\n const ARABIC_ZERO = 1632;\n const ARABIC_NINE = 1641;\n const ARABIC_YEH = 1610;\n const PERSIAN_YE = 1740;\n const ARABIC_KAF = 1603;\n const PERSIAN_KE = 1705;\n let result = \"\";\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n let char = value[i];\n if (code >= PERSIAN_ZERO && code <= PERSIAN_NINE) {\n char = String(code - PERSIAN_ZERO);\n } else if (code >= ARABIC_ZERO && code <= ARABIC_NINE) {\n char = String(code - ARABIC_ZERO);\n } else if (code === ARABIC_YEH) {\n char = String.fromCharCode(PERSIAN_YE);\n } else if (code === ARABIC_KAF) {\n char = String.fromCharCode(PERSIAN_KE);\n }\n result += char;\n }\n return result;\n}\n\nexport type BankInfo = {\n name: string;\n label: string;\n color: string;\n logo: string;\n formatted: string;\n} | null;\n\nexport function getBankInfo(cardNumber: string): BankInfo {\n const normalized = verifyAndNormalize(cardNumber).replace(/[\\-\\s]/g, \"\");\n if (normalized.length < 6) return null;\n const bin = normalized.substring(0, 6);\n // @ts-ignore\n const bank = BANKS[bin];\n if (!bank) return null;\n return {\n ...bank,\n formatted: normalized.replace(/(\\d{4})(?=\\d)/g, \"$1-\"),\n };\n}\n\nexport type OperatorInfo = {\n name: string;\n label: string;\n logo: string;\n} | null;\n\nexport function getMobileOperator(mobile: string): OperatorInfo {\n const normalized = verifyAndNormalize(mobile);\n\n let prefix = \"\";\n if (normalized.startsWith(\"09\")) {\n prefix = normalized.substring(0, 4);\n } else if (normalized.startsWith(\"9\")) {\n prefix = \"0\" + normalized.substring(0, 3);\n } else if (normalized.startsWith(\"+98\")) {\n prefix = \"0\" + normalized.substring(3, 6);\n }\n\n if (prefix.length !== 4) return null;\n\n for (const [key, op] of Object.entries(MOBILE_OPERATORS)) {\n // @ts-ignore\n if (op.prefixes.includes(prefix)) {\n return {\n name: key,\n label: op.label,\n logo: op.logo,\n };\n }\n }\n\n return null;\n}\n\nexport function isMelliCode(code: string): boolean {\n if (!/^\\d{10}$/.test(code)) return false;\n if (/^(\\d)\\1+$/.test(code)) return false;\n const check = parseInt(code[9]);\n const sum =\n code\n .substring(0, 9)\n .split(\"\")\n .reduce((acc, x, i) => acc + parseInt(x) * (10 - i), 0) % 11;\n return sum < 2 ? check === sum : check === 11 - sum;\n}\nexport function isShenaseMelli(code: string): boolean {\n if (code.length !== 11 || !/^\\d{11}$/.test(code)) return false;\n const tenth = parseInt(code[9]);\n const inputCheck = parseInt(code[10]);\n const coefficients = [29, 27, 23, 19, 17, 29, 27, 23, 19, 17];\n let sum = 0;\n for (let i = 0; i < 10; i++) {\n const digit = parseInt(code[i]);\n sum += (digit + tenth + 2) * coefficients[i];\n }\n const remainder = sum % 11;\n const calculatedCheck = remainder === 10 ? 0 : remainder;\n return calculatedCheck === inputCheck;\n}\nexport function isPassport(code: string): boolean {\n return /^[A-Za-z][0-9]{8,9}$/.test(code);\n}\nexport function isCardNumber(code: string): boolean {\n const sanitized = code.replace(/[\\-\\s]/g, \"\");\n if (!/^\\d{16}$/.test(sanitized)) return false;\n let sum = 0;\n let shouldDouble = false;\n for (let i = sanitized.length - 1; i >= 0; i--) {\n let digit = parseInt(sanitized[i]);\n if (shouldDouble) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n shouldDouble = !shouldDouble;\n }\n return sum % 10 === 0;\n}\ninterface MobileValidationOptions {\n strictZero?: boolean | \"optional\";\n}\nexport function isIranianMobile(\n mobile: string,\n { strictZero = \"optional\" }: MobileValidationOptions = {}\n): boolean {\n const corePattern = \"9\\\\d{9}\";\n let pattern = \"\";\n if (strictZero === true) pattern = `^0${corePattern}$`;\n else if (strictZero === false) pattern = `^${corePattern}$`;\n else pattern = `^(?:0|\\\\+98)?${corePattern}$`;\n return new RegExp(pattern).test(mobile);\n}\nexport function isSheba(code: string): boolean {\n const iban = code.toUpperCase().replace(/[\\-\\s]/g, \"\");\n if (iban.length !== 26 || !iban.startsWith(\"IR\")) return false;\n const newStr = iban.substring(4) + iban.substring(0, 4);\n const numericString = newStr\n .split(\"\")\n .map((c) => {\n const code = c.charCodeAt(0);\n return code >= 48 && code <= 57 ? c : (code - 55).toString();\n })\n .join(\"\");\n try {\n return BigInt(numericString) % BigInt(97) === BigInt(1);\n } catch {\n return false;\n }\n}\nexport function isPostalCode(code: string): boolean {\n return /^[1-9]\\d{9}$/.test(code);\n}\nexport function isLandline(code: string): boolean {\n return /^0\\d{2}\\d{8}$/.test(code);\n}\n","export const ERROR_MESSAGES = {\n fa: {\n melliCode: \"کد ملی نامعتبر است\",\n shenaseMelli: \"شناسه ملی نامعتبر است\",\n passport: \"شماره گذرنامه نامعتبر است\",\n cardNumber: \"شماره کارت نامعتبر است\",\n mobile: \"شماره موبایل نامعتبر است\",\n sheba: \"شماره شبا نامعتبر است\",\n postalCode: \"کد پستی نامعتبر است\",\n landline: \"شماره تلفن ثابت نامعتبر است\",\n },\n en: {\n melliCode: \"Invalid national code\",\n shenaseMelli: \"Invalid legal person ID (Shenase Melli)\",\n passport: \"Invalid passport number\",\n cardNumber: \"Invalid card number\",\n mobile: \"Invalid mobile number\",\n sheba: \"Invalid Sheba (IBAN) number\",\n postalCode: \"Invalid postal code\",\n landline: \"Invalid landline number\",\n },\n} as const;\n\nexport type Language = keyof typeof ERROR_MESSAGES;\n\nexport interface BaseOptions {\n message?: string;\n locale?: Language;\n}\n\nexport const getMessage = (\n key: keyof typeof ERROR_MESSAGES[\"fa\"],\n options?: BaseOptions\n): string => {\n if (options?.message) return options.message;\n const lang = options?.locale || \"fa\";\n return ERROR_MESSAGES[lang][key];\n};"],"mappings":"AAAA,OAAS,KAAAA,MAAS,MCAlB,IAAMC,EACJ,iEACIC,EACJ,qEAEWC,EAAQ,CACnB,OAAU,CACR,KAAM,QACN,MAAO,qBACP,MAAO,UACP,KAAM,GAAGF,CAAS,YACpB,EACA,OAAU,CACR,KAAM,QACN,MAAO,qBACP,MAAO,UACP,KAAM,GAAGA,CAAS,YACpB,EACA,OAAU,CACR,KAAM,eACN,MAAO,sEACP,MAAO,UACP,KAAM,GAAGA,CAAS,oBACpB,EACA,OAAU,CACR,KAAM,aACN,MAAO,2DACP,MAAO,UACP,KAAM,GAAGA,CAAS,kBACpB,EACA,OAAU,CACR,KAAM,aACN,MAAO,6CACP,MAAO,UACP,KAAM,GAAGA,CAAS,iBACpB,EACA,OAAU,CACR,KAAM,SACN,MAAO,2BACP,MAAO,UACP,KAAM,GAAGA,CAAS,aACpB,EACA,OAAU,CACR,KAAM,WACN,MAAO,8CACP,MAAO,UACP,KAAM,GAAGA,CAAS,gBACpB,EACA,OAAU,CACR,KAAM,cACN,MAAO,gEACP,MAAO,UACP,KAAM,GAAGA,CAAS,mBACpB,EACA,OAAU,CACR,KAAM,gBACN,MAAO,gEACP,MAAO,UACP,KAAM,GAAGA,CAAS,qBACpB,EACA,OAAU,CACR,KAAM,UACN,MAAO,6CACP,MAAO,UACP,KAAM,GAAGA,CAAS,cACpB,EACA,OAAU,CACR,KAAM,WACN,MAAO,mDACP,MAAO,UACP,KAAM,GAAGA,CAAS,eACpB,EACA,OAAU,CACR,KAAM,YACN,MAAO,mDACP,MAAO,UACP,KAAM,GAAGA,CAAS,gBACpB,EACA,OAAU,CACR,KAAM,QACN,MAAO,iCACP,MAAO,UACP,KAAM,GAAGA,CAAS,YACpB,EACA,OAAU,CACR,KAAM,OACN,MAAO,2BACP,MAAO,UACP,KAAM,GAAGA,CAAS,WACpB,EACA,OAAU,CACR,KAAM,WACN,MAAO,uCACP,MAAO,UACP,KAAM,GAAGA,CAAS,eACpB,EACA,OAAU,CACR,KAAM,UACN,MAAO,iCACP,MAAO,UACP,KAAM,GAAGA,CAAS,cACpB,EACA,OAAU,CACR,KAAM,QACN,MAAO,qBACP,MAAO,UACP,KAAM,GAAGA,CAAS,YACpB,EACA,OAAU,CACR,KAAM,MACN,MAAO,eACP,MAAO,UACP,KAAM,GAAGA,CAAS,UACpB,EACA,OAAU,CACR,KAAM,UACN,MAAO,uCACP,MAAO,UACP,KAAM,GAAGA,CAAS,cACpB,EACA,OAAU,CACR,KAAM,SACN,MAAO,qBACP,MAAO,UACP,KAAM,GAAGA,CAAS,aACpB,EACA,OAAU,CACR,KAAM,UACN,MAAO,iCACP,MAAO,UACP,KAAM,GAAGA,CAAS,cACpB,EACA,OAAU,CACR,KAAM,UACN,MAAO,iCACP,MAAO,UACP,KAAM,GAAGA,CAAS,cACpB,EACA,OAAU,CACR,KAAM,QACN,MAAO,2BACP,MAAO,UACP,KAAM,GAAGA,CAAS,YACpB,EACA,OAAU,CACR,KAAM,QACN,MAAO,iCACP,MAAO,UACP,KAAM,GAAGA,CAAS,YACpB,EACA,OAAU,CACR,KAAM,YACN,MAAO,0DACP,MAAO,UACP,KAAM,GAAGA,CAAS,iBACpB,EACA,OAAU,CACR,KAAM,cACN,MAAO,6CACP,MAAO,UACP,KAAM,GAAGA,CAAS,kBACpB,EACA,OAAU,CACR,KAAM,SACN,MAAO,2BACP,MAAO,UACP,KAAM,GAAGA,CAAS,aACpB,EACA,OAAU,CACR,KAAM,QACN,MAAO,2BACP,MAAO,UACP,KAAM,GAAGA,CAAS,YACpB,EACA,OAAU,CACR,KAAM,WACN,MAAO,oDACP,MAAO,UACP,KAAM,GAAGA,CAAS,gBACpB,EACA,OAAU,CACR,KAAM,UACN,MAAO,iCACP,MAAO,UACP,KAAM,GAAGA,CAAS,cACpB,EACA,OAAU,CACR,KAAM,WACN,MAAO,oFACP,MAAO,UACP,KAAM,GAAGA,CAAS,eACpB,EACA,OAAU,CACR,KAAM,eACN,MAAO,yDACP,MAAO,UACP,KAAM,GAAGA,CAAS,mBACpB,CACF,EAEaG,EAAmB,CAC9B,IAAK,CACH,MAAO,oDACP,KAAM,GAAGF,CAAa,WACtB,SAAU,CACR,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACF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","names":["z","CDN_BANKS","CDN_OPERATORS","BANKS","MOBILE_OPERATORS","verifyAndNormalize","value","PERSIAN_ZERO","PERSIAN_NINE","ARABIC_ZERO","ARABIC_NINE","ARABIC_YEH","PERSIAN_YE","ARABIC_KAF","PERSIAN_KE","result","i","code","char","getBankInfo","cardNumber","normalized","bin","bank","BANKS","getMobileOperator","mobile","prefix","key","op","MOBILE_OPERATORS","isMelliCode","check","sum","acc","x","isShenaseMelli","tenth","inputCheck","coefficients","digit","remainder","isPassport","isCardNumber","sanitized","shouldDouble","isIranianMobile","strictZero","corePattern","pattern","isSheba","iban","numericString","c","isPostalCode","isLandline","ERROR_MESSAGES","getMessage","key","options","lang","zMelliCode","options","z","val","isMelliCode","getMessage","zShenaseMelli","isShenaseMelli","zPassport","isPassport","zCardNumber","isCardNumber","zIranianMobile","isIranianMobile","zSheba","isSheba","zPostalCode","isPostalCode","zLandline","isLandline","preprocessNumber","schema","verifyAndNormalize"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data.ts","../src/pelak-city-codes.ts","../src/utils.ts","../src/constants.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n isMelliCode,\n isShenaseMelli,\n isPassport,\n isCardNumber,\n isIranianMobile,\n isSheba,\n isPostalCode,\n isLandline,\n isBillIdValid,\n isPaymentIdValid,\n isPlateNumber,\n verifyAndNormalize,\n getBankInfo,\n getMobileOperator,\n getBillInfo,\n getPlateInfo,\n type BankInfo,\n type OperatorInfo,\n type BillInfo,\n type PlateInfo,\n} from \"./utils\";\nimport { getMessage, BaseOptions } from \"./constants\";\n\nexport const zMelliCode = (options?: BaseOptions) =>\n z.string().refine((val) => isMelliCode(val), {\n message: getMessage(\"melliCode\", options),\n });\n\nexport const zShenaseMelli = (options?: BaseOptions) =>\n z.string().refine((val) => isShenaseMelli(val), {\n message: getMessage(\"shenaseMelli\", options),\n });\n\nexport const zPassport = (options?: BaseOptions) =>\n z.string().refine((val) => isPassport(val), {\n message: getMessage(\"passport\", options),\n });\n\nexport const zCardNumber = (options?: BaseOptions) =>\n z.string().refine((val) => isCardNumber(val), {\n message: getMessage(\"cardNumber\", options),\n });\n\ninterface MobileOptions extends BaseOptions {\n strictZero?: boolean | \"optional\";\n}\n\nexport const zIranianMobile = (options?: MobileOptions) =>\n z\n .string()\n .refine(\n (val) => isIranianMobile(val, { strictZero: options?.strictZero }),\n {\n message: getMessage(\"mobile\", options),\n }\n );\n\nexport const zSheba = (options?: BaseOptions) =>\n z.string().refine((val) => isSheba(val), {\n message: getMessage(\"sheba\", options),\n });\n\nexport const zPostalCode = (options?: BaseOptions) =>\n z.string().refine((val) => isPostalCode(val), {\n message: getMessage(\"postalCode\", options),\n });\n\nexport const zLandline = (options?: BaseOptions) =>\n z.string().refine((val) => isLandline(val), {\n message: getMessage(\"landline\", options),\n });\n\nexport const zBillId = (options?: BaseOptions) =>\n z.string().refine((val) => isBillIdValid(val), {\n message: getMessage(\"billId\", options),\n });\n\nexport const zPaymentId = (options?: BaseOptions) =>\n z.string().refine((val) => val.length >= 6 && val.length <= 13, {\n message: getMessage(\"paymentId\", options),\n });\n\nexport const zPlateNumber = (options?: BaseOptions) =>\n z.string().refine((val) => isPlateNumber(val), {\n message: getMessage(\"plateNumber\", options),\n });\n\nexport const preprocessNumber = (schema: z.ZodTypeAny) =>\n z.preprocess((val) => {\n if (typeof val === \"string\") {\n return verifyAndNormalize(val);\n }\n return val;\n }, schema);\n\nexport {\n isMelliCode,\n isShenaseMelli,\n isPassport,\n isCardNumber,\n isIranianMobile,\n isSheba,\n isPostalCode,\n isLandline,\n isBillIdValid,\n isPaymentIdValid,\n isPlateNumber,\n verifyAndNormalize,\n getBankInfo,\n getMobileOperator,\n getBillInfo,\n getPlateInfo,\n type BankInfo,\n type OperatorInfo,\n type BillInfo,\n type PlateInfo,\n type BaseOptions,\n};\n","const CDN_BANKS = \"https://cdn.jsdelivr.net/gh/Reza-kh80/zod-ir@main/assets/banks\";\nconst CDN_OPERATORS = \"https://cdn.jsdelivr.net/gh/Reza-kh80/zod-ir@main/assets/operators\";\nconst CDN_BILLS = \"https://cdn.jsdelivr.net/gh/Reza-kh80/zod-ir@main/assets/bills\"; \n\nexport const BANKS = {\n \"603799\": { name: \"Melli\", label: \"ملی\", color: \"#EF3F3E\", logo: `${CDN_BANKS}/melli.svg` },\n \"589210\": { name: \"Sepah\", label: \"سپه\", color: \"#FFC600\", logo: `${CDN_BANKS}/sepah.svg` },\n \"627648\": { name: \"ToseeSaderat\", label: \"توسعه صادرات\", color: \"#EDB12C\", logo: `${CDN_BANKS}/tosee-saderat.svg` },\n \"627961\": { name: \"SanatMadar\", label: \"صنعت و معدن\", color: \"#B3986D\", logo: `${CDN_BANKS}/sanat-madan.svg` },\n \"603770\": { name: \"Keshavarzi\", label: \"کشاورزی\", color: \"#4E7A46\", logo: `${CDN_BANKS}/keshavarzi.svg` },\n \"628023\": { name: \"Maskan\", label: \"مسکن\", color: \"#F05A23\", logo: `${CDN_BANKS}/maskan.svg` },\n \"627760\": { name: \"PostBank\", label: \"پست بانک\", color: \"#00764D\", logo: `${CDN_BANKS}/post-bank.svg` },\n \"502908\": { name: \"ToseeTaavon\", label: \"توسعه تعاون\", color: \"#0064A6\", logo: `${CDN_BANKS}/tosee-taavon.svg` },\n \"627412\": { name: \"EghtesadNovin\", label: \"اقتصاد نوین\", color: \"#652D86\", logo: `${CDN_BANKS}/eghtesad-novin.svg` },\n \"622106\": { name: \"Parsian\", label: \"پارسیان\", color: \"#B3282D\", logo: `${CDN_BANKS}/parsian.svg` },\n \"502229\": { name: \"Pasargad\", label: \"پاسارگاد\", color: \"#FFC72C\", logo: `${CDN_BANKS}/pasargad.svg` },\n \"627488\": { name: \"Karafarin\", label: \"کارآفرین\", color: \"#3B9C56\", logo: `${CDN_BANKS}/karafarin.svg` },\n \"621986\": { name: \"Saman\", label: \"سامان\", color: \"#006DB6\", logo: `${CDN_BANKS}/saman.svg` },\n \"639346\": { name: \"Sina\", label: \"سینا\", color: \"#004E8A\", logo: `${CDN_BANKS}/sina.svg` },\n \"639607\": { name: \"Sarmayeh\", label: \"سرمایه\", color: \"#0077B6\", logo: `${CDN_BANKS}/sarmayeh.svg` },\n \"636214\": { name: \"Ayandeh\", label: \"آینده\", color: \"#8B5F34\", logo: `${CDN_BANKS}/ayandeh.svg` },\n \"502806\": { name: \"Shahr\", label: \"شهر\", color: \"#ED3438\", logo: `${CDN_BANKS}/shahr.svg` },\n \"502938\": { name: \"Day\", label: \"دی\", color: \"#0099CC\", logo: `${CDN_BANKS}/day.svg` },\n \"603769\": { name: \"Saderat\", label: \"صادرات\", color: \"#1A3266\", logo: `${CDN_BANKS}/saderat.svg` },\n \"610433\": { name: \"Mellat\", label: \"ملت\", color: \"#D70005\", logo: `${CDN_BANKS}/mellat.svg` },\n \"627353\": { name: \"Tejarat\", label: \"تجارت\", color: \"#005696\", logo: `${CDN_BANKS}/tejarat.svg` },\n \"585983\": { name: \"Tejarat\", label: \"تجارت\", color: \"#005696\", logo: `${CDN_BANKS}/tejarat.svg` },\n \"589463\": { name: \"Refah\", label: \"رفاه\", color: \"#2B3C8E\", logo: `${CDN_BANKS}/refah.svg` },\n \"627381\": { name: \"Ansar\", label: \"انصار\", color: \"#F7B500\", logo: `${CDN_BANKS}/ansar.svg` },\n \"505785\": { name: \"IranZamin\", label: \"ایران زمین\", color: \"#92278F\", logo: `${CDN_BANKS}/iran-zamin.svg` },\n \"505416\": { name: \"Gardeshgari\", label: \"گردشگری\", color: \"#1D3265\", logo: `${CDN_BANKS}/gardeshgari.svg` },\n \"636949\": { name: \"Hekmat\", label: \"حکمت\", color: \"#5F2C83\", logo: `${CDN_BANKS}/hekmat.svg` },\n \"505801\": { name: \"Kosar\", label: \"کوثر\", color: \"#C62828\", logo: `${CDN_BANKS}/kosar.svg` },\n \"606373\": { name: \"MehrIran\", label: \"مهر ایران\", color: \"#359E49\", logo: `${CDN_BANKS}/mehr-iran.svg` },\n \"504172\": { name: \"Resalat\", label: \"رسالت\", color: \"#000000\", logo: `${CDN_BANKS}/resalat.svg` },\n \"523388\": { name: \"Pasargad\", label: \"پاسارگاد (ویپاد)\", color: \"#FFC72C\", logo: `${CDN_BANKS}/pasargad.svg` },\n \"505809\": { name: \"Khavarmianeh\", label: \"خاورمیانه\", color: \"#1F2B5B\", logo: `${CDN_BANKS}/khavarmianeh.svg` },\n} as const;\n\nexport const MOBILE_OPERATORS = {\n MCI: {\n label: \"همراه اول\",\n logo: `${CDN_OPERATORS}/mci.svg`,\n prefixes: [\"0910\", \"0911\", \"0912\", \"0913\", \"0914\", \"0915\", \"0916\", \"0917\", \"0918\", \"0919\", \"0990\", \"0991\", \"0992\", \"0993\", \"0994\"],\n },\n Irancell: {\n label: \"ایرانسل\",\n logo: `${CDN_OPERATORS}/irancell.svg`,\n prefixes: [\"0930\", \"0933\", \"0935\", \"0936\", \"0937\", \"0938\", \"0939\", \"0901\", \"0902\", \"0903\", \"0904\", \"0905\", \"0941\"],\n },\n Rightel: {\n label: \"رایتل\",\n logo: `${CDN_OPERATORS}/rightel.svg`,\n prefixes: [\"0920\", \"0921\", \"0922\", \"0923\"],\n },\n Shatel: {\n label: \"شاتل موبایل\",\n logo: `${CDN_OPERATORS}/shatel.svg`,\n prefixes: [\"0998\"],\n },\n Taliya: {\n label: \"تالیا\",\n logo: `${CDN_OPERATORS}/taliya.png`,\n prefixes: [\"0932\"],\n },\n} as const;\n\n// مالیات حذف شد\nexport const BILL_TYPES = {\n 1: { label: \"آب\", type: \"water\", color: \"#00a8ff\", logo: `${CDN_BILLS}/water.svg` },\n 2: { label: \"برق\", type: \"electricity\", color: \"#fbc531\", logo: `${CDN_BILLS}/electricity.svg` },\n 3: { label: \"گاز\", type: \"gas\", color: \"#e84118\", logo: `${CDN_BILLS}/gas.svg` },\n 4: { label: \"تلفن ثابت\", type: \"phone\", color: \"#273c75\", logo: `${CDN_BILLS}/phone.svg` },\n 5: { label: \"تلفن همراه\", type: \"mobile\", color: \"#8c7ae6\", logo: `${CDN_BILLS}/mobile.svg` },\n 6: { label: \"عوارض شهرداری\", type: \"municipality\", color: \"#44bd32\", logo: `${CDN_BILLS}/municipality.svg` },\n 9: { label: \"جرایم رانندگی\", type: \"traffic\", color: \"#c23616\", logo: `${CDN_BILLS}/traffic.svg` },\n} as const;","export const PLATE_CITY_CODES = [\n {\n province: \"آذربایجان شرقی\",\n codes: [\n {\n code: \"15\",\n details: [\n {\n city: \"تبریز\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"25\",\n details: [\n { city: \"اهر\", letters: [\"س\"] },\n { city: \"آذرشهر\", letters: [\"ی\"] },\n { city: \"بستانآباد\", letters: [\"م\"] },\n { city: \"بناب\", letters: [\"ل\"] },\n { city: \"جلفا\", letters: [\"ط\"] },\n { city: \"سراب\", letters: [\"ص\"] },\n { city: \"شبستر\", letters: [\"ن\"] },\n { city: \"کلیبر\", letters: [\"و\"] },\n { city: \"مراغه\", letters: [\"ب\"] },\n { city: \"مرند\", letters: [\"ج\"] },\n { city: \"میانه\", letters: [\"د\"] },\n { city: \"هریس\", letters: [\"ه\"] },\n { city: \"هشترود\", letters: [\"ق\"] },\n ],\n },\n {\n code: \"35\",\n details: [\n { city: \"اسکو\", letters: [\"ب\"] },\n { city: \"مرند\", letters: [\"ط\"] },\n { city: \"مراغه\", letters: [\"ق\"] },\n { city: \"تبریز\", letters: [\"ل\", \"م\"] },\n { city: \"آذرشهر\", letters: [\"ص\"] },\n { city: \"اهر\", letters: [\"ن\"] },\n { city: \"بناب\", letters: [\"س\"] },\n { city: \"بستان آباد\", letters: [\"ی\"] },\n { city: \"جلفا\", letters: [\"ه\"] },\n { city: \"سراب\", letters: [\"و\"] },\n { city: \"شبستر\", letters: [\"د\"] },\n { city: \"کلیبر\", letters: [\"ج\"] },\n { city: \"میانه\", letters: [\"ز\"] },\n { city: \"هریس\", letters: [\"الف\"] },\n { city: \"هشترود\", letters: [\"ت\"] },\n { city: \"تبریز و چاراویماق\", letters: [\"س\"] },\n ],\n },\n ],\n },\n {\n province: \"آذربایجان غربی\",\n codes: [\n {\n code: \"17\",\n details: [\n {\n city: \"ارومیه\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n ],\n },\n { city: \"خوی\", letters: [\"م\"] },\n ],\n },\n {\n code: \"27\",\n details: [\n { city: \"خوی\", letters: [\"ب\"] },\n { city: \"مهاباد\", letters: [\"ج\"] },\n { city: \"ماکو\", letters: [\"د\"] },\n { city: \"سلماس\", letters: [\"س\"] },\n { city: \"نقده\", letters: [\"ص\"] },\n { city: \"میاندوآب\", letters: [\"ط\", \"ن\"] },\n { city: \"تکاب\", letters: [\"ق\"] },\n { city: \"شاهیندژ\", letters: [\"ل\"] },\n { city: \"سردشت\", letters: [\"م\"] },\n { city: \"بوکان\", letters: [\"ن\"] },\n { city: \"چالدران\", letters: [\"ه\"] },\n { city: \"پیرانشهر\", letters: [\"و\"] },\n { city: \"اشنویه\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"37\",\n details: [\n { city: \"خوی\", letters: [\"ب\"] },\n { city: \"میاندوآب\", letters: [\"ج\"] },\n { city: \"نقده\", letters: [\"د\"] },\n { city: \"مهاباد\", letters: [\"ص\"] },\n { city: \"بوکان\", letters: [\"ط\"] },\n { city: \"سلماس\", letters: [\"ق\"] },\n { city: \"ماکو\", letters: [\"ل\"] },\n ],\n },\n ],\n },\n {\n province: \"اردبیل\",\n codes: [\n {\n code: \"91\",\n details: [\n { city: \"اردبیل\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"م\", \"و\", \"ی\"] },\n { city: \"پارسآباد\", letters: [\"ص\", \"م\", \"و\", \"ی\"] },\n { city: \"خلخال\", letters: [\"ط\"] },\n { city: \"گرمی\", letters: [\"ل\"] },\n { city: \"بیلهسوار\", letters: [\"ل\"] },\n { city: \"مشکینشهر\", letters: [\"ل\", \"ن\"] },\n { city: \"نیر\", letters: [\"م\"] },\n { city: \"کوثر\", letters: [\"م\", \"و\"] },\n { city: \"نمین\", letters: [\"ن\"] },\n ],\n },\n ],\n },\n {\n province: \"اصفهان\",\n codes: [\n {\n code: \"13\",\n details: [\n {\n city: \"اصفهان\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n { city: \"فلاورجان\", letters: [\"ص\"] },\n ],\n },\n {\n code: \"23\",\n details: [\n { city: \"کاشان\", letters: [\"ب\"] },\n { city: \"نجفآباد\", letters: [\"ج\"] },\n { city: \"شهرضا\", letters: [\"د\"] },\n { city: \"خمینیشهر\", letters: [\"س\"] },\n { city: \"گلپایگان\", letters: [\"ص\"] },\n { city: \"نطنز\", letters: [\"ط\"] },\n { city: \"اردستان\", letters: [\"ق\"] },\n { city: \"خوانسار\", letters: [\"ل\"] },\n { city: \"نایین\", letters: [\"م\"] },\n { city: \"سمیرم\", letters: [\"ن\"] },\n { city: \"فلاورجان\", letters: [\"ه\"] },\n { city: \"فریدونشهر\", letters: [\"و\"] },\n { city: \"لنجان\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"43\",\n details: [\n { city: \"فریدن\", letters: [\"ب\"] },\n { city: \"مبارکه\", letters: [\"ج\", \"ط\"] },\n { city: \"شاهینشهر و میمه\", letters: [\"د\", \"ل\"] },\n { city: \"آران و بیدگل\", letters: [\"س\"] },\n { city: \"تیران و کرون\", letters: [\"ص\"] },\n { city: \"دهاقان\", letters: [\"ق\"] },\n { city: \"نجفآباد\", letters: [\"م\"] },\n { city: \"خمینیشهر\", letters: [\"ن\"] },\n { city: \"لنجان\", letters: [\"ه\"] },\n { city: \"کاشان\", letters: [\"و\"] },\n { city: \"فلاورجان\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"53\",\n details: [\n { city: \"اصفهان\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ق\", \"ل\", \"و\"] },\n { city: \"شهرضا\", letters: [\"ط\"] },\n { city: \"شاهینشهر و میمه\", letters: [\"م\"] },\n { city: \"نجفآباد\", letters: [\"ن\"] },\n { city: \"کاشان\", letters: [\"ه\"] },\n { city: \"خمینیشهر\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"67\",\n details: [\n {\n city: \"اصفهان\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ط\", \"ل\", \"م\", \"ن\", \"و\"],\n },\n { city: \"شاهینشهر و میمه\", letters: [\"ق\"] },\n { city: \"لنجان\", letters: [\"ص\"] },\n ],\n },\n ],\n },\n {\n province: \"البرز\",\n codes: [\n {\n code: \"21\",\n details: [\n { city: \"ساوجبلاغ\", letters: [\"ص\"] },\n { city: \"کرج\", letters: [\"ل\", \"و\"] },\n ],\n },\n {\n code: \"30\",\n details: [{ city: \"کرج\", letters: [\"د\", \"س\", \"ل\", \"م\", \"ه\"] }],\n },\n {\n code: \"38\",\n details: [\n { city: \"کرج\", letters: [\"ب\", \"د\", \"س\", \"م\", \"ن\", \"ه\", \"ی\"] },\n ],\n },\n {\n code: \"68\",\n details: [\n {\n city: \"کرج\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"78\",\n details: [{ city: \"ساوجبلاغ\", letters: [\"ط\"] }],\n },\n ],\n },\n {\n province: \"ایلام\",\n codes: [\n {\n code: \"98\",\n details: [\n { city: \"ایلام\", letters: [\"ب\", \"ج\", \"د\"] },\n { city: \"مهران\", letters: [\"ص\"] },\n { city: \"بدره\", letters: [\"ط\"] },\n { city: \"دهلران\", letters: [\"ق\"] },\n { city: \"چرداول\", letters: [\"ل\"] },\n { city: \"ایوان\", letters: [\"م\"] },\n { city: \"آبدانان\", letters: [\"ن\"] },\n ],\n },\n ],\n },\n {\n province: \"بوشهر\",\n codes: [\n {\n code: \"48\",\n details: [\n {\n city: \"بوشهر\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"58\",\n details: [\n { city: \"دشتستان\", letters: [\"ب\", \"م\", \"و\"] },\n { city: \"گناوه\", letters: [\"ج\", \"ه\"] },\n { city: \"کنگان، عسلویه\", letters: [\"د\", \"ن\"] },\n { city: \"تنگستان\", letters: [\"س\"] },\n { city: \"دشتی\", letters: [\"ص\", \"ی\"] },\n { city: \"دیر\", letters: [\"ط\"] },\n { city: \"دیلم\", letters: [\"ق\"] },\n { city: \"جم\", letters: [\"ل\"] },\n ],\n },\n ],\n },\n {\n province: \"تهران\",\n codes: [\n {\n code: \"11, 22, 33, 44, 55, 66, 77, 88, 99, 10, 20, 40, 50, 60\",\n details: [\n {\n city: \"تهران (شهر)\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"21\",\n details: [\n { city: \"اسلامشهر\", letters: [\"ب\", \"ی\"] },\n { city: \"رباطکریم\", letters: [\"م\"] },\n { city: \"پاکدشت\", letters: [\"ل\"] },\n ],\n },\n {\n code: \"30\",\n details: [\n { city: \"اسلامشهر\", letters: [\"ق\"] },\n { city: \"پاکدشت\", letters: [\"ن\"] },\n ],\n },\n {\n code: \"78\",\n details: [\n { city: \"اسلامشهر\", letters: [\"ب\", \"ق\"] },\n { city: \"رباطکریم\", letters: [\"ج\"] },\n { city: \"ری\", letters: [\"ن\"] },\n { city: \"شمیرانات\", letters: [\"و\"] },\n ],\n },\n {\n code: \"38\",\n details: [{ city: \"رباطکریم\", letters: [\"ل\"] }],\n },\n ],\n },\n {\n province: \"چهارمحال و بختیاری\",\n codes: [\n {\n code: \"71\",\n details: [\n {\n city: \"شهرکرد\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"81\",\n details: [\n { city: \"بروجن\", letters: [\"ب\", \"ق\"] },\n { city: \"لردگان\", letters: [\"س\"] },\n { city: \"فارسان\", letters: [\"د\"] },\n { city: \"اردل\", letters: [\"ج\"] },\n { city: \"کوهرنگ\", letters: [\"ص\"] },\n { city: \"کیار\", letters: [\"ط\"] },\n { city: \"بن\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"خراسان شمالی\",\n codes: [\n {\n code: \"32\",\n details: [{ city: \"بجنورد\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\"] }],\n },\n {\n code: \"26\",\n details: [\n { city: \"شیروان\", letters: [\"ص\", \"ب\"] },\n { city: \"اسفراین\", letters: [\"ج\", \"ط\"] },\n { city: \"مانه و سملقان\", letters: [\"د\", \"ل\"] },\n { city: \"فاروج\", letters: [\"م\"] },\n { city: \"بجنورد\", letters: [\"ب\", \"ج\", \"د\"] },\n { city: \"جاجرم و گرمه\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"خراسان رضوی\",\n codes: [\n {\n code: \"12\",\n details: [\n {\n city: \"مشهد\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"32\",\n details: [\n { city: \"نیشابور\", letters: [\"ب\", \"ی\"] },\n { city: \"سبزوار\", letters: [\"ج\"] },\n { city: \"تربتجام\", letters: [\"ص\"] },\n { city: \"قوچان\", letters: [\"ط\"] },\n { city: \"گناباد\", letters: [\"ق\"] },\n { city: \"تربتحیدریه\", letters: [\"ل\", \"ن\"] },\n { city: \"کاشمر\", letters: [\"م\"] },\n { city: \"تایباد\", letters: [\"ه\"] },\n { city: \"مشهد\", letters: [\"و\"] },\n ],\n },\n {\n code: \"36\",\n details: [\n { city: \"مشهد\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ه\", \"و\"] },\n { city: \"کاشمر\", letters: [\"ق\"] },\n { city: \"نیشابور\", letters: [\"ل\"] },\n { city: \"سبزوار\", letters: [\"م\"] },\n { city: \"تربت حیدریه\", letters: [\"ن\"] },\n { city: \"تربتجام\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"42\",\n details: [\n { city: \"فریمان\", letters: [\"ب\"] },\n { city: \"مشهد\", letters: [\"ج\", \"ق\", \"ه\", \"و\"] },\n { city: \"سرخس\", letters: [\"د\"] },\n { city: \"درگز\", letters: [\"س\"] },\n { city: \"خواف\", letters: [\"ص\"] },\n { city: \"چناران\", letters: [\"ط\"] },\n { city: \"بردسکن\", letters: [\"ل\"] },\n { city: \"رشتخوار\", letters: [\"م\"] },\n { city: \"سبزوار\", letters: [\"ن\"] },\n { city: \"تربت حیدریه\", letters: [\"ی\"] },\n { city: \"کلات\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"74\",\n details: [\n {\n city: \"مشهد\",\n letters: [\"ب\", \"د\", \"س\", \"ص\", \"ق\", \"م\", \"ن\", \"ه\", \"و\", \"ی\"],\n },\n { city: \"قوچان\", letters: [\"ج\"] },\n { city: \"نیشابور\", letters: [\"ط\"] },\n { city: \"سبزوار\", letters: [\"ل\"] },\n { city: \"گناباد\", letters: [\"ن\"] },\n ],\n },\n ],\n },\n {\n province: \"خراسان جنوبی\",\n codes: [\n {\n code: \"32\",\n details: [{ city: \"بیرجند\", letters: [\"د\"] }],\n },\n {\n code: \"52\",\n details: [\n { city: \"بیرجند\", letters: [\"ب\", \"ج\", \"د\"] },\n { city: \"قاینات\", letters: [\"ص\"] },\n { city: \"فردوس\", letters: [\"ط\"] },\n { city: \"نهبندان\", letters: [\"ق\"] },\n { city: \"سربیشه\", letters: [\"ل\"] },\n ],\n },\n {\n code: \"64\",\n details: [{ city: \"طبس\", letters: [\"ق\"] }],\n },\n ],\n },\n {\n province: \"خوزستان\",\n codes: [\n {\n code: \"14\",\n details: [\n {\n city: \"اهواز\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"24\",\n details: [\n { city: \"آبادان\", letters: [\"ب\", \"ق\"] },\n { city: \"خرمشهر\", letters: [\"ج\"] },\n { city: \"دزفول\", letters: [\"د\"] },\n { city: \"بهبهان\", letters: [\"س\"] },\n { city: \"مسجد سلیمان\", letters: [\"ص\"] },\n { city: \"ماهشهر\", letters: [\"ط\", \"ه\"] },\n { city: \"دشت آزادگان\", letters: [\"ق\"] },\n { city: \"رامهرمز\", letters: [\"ل\"] },\n { city: \"اندیمشک\", letters: [\"م\"] },\n { city: \"شوشتر\", letters: [\"ن\"] },\n { city: \"شادگان\", letters: [\"ه\"] },\n { city: \"شوش\", letters: [\"و\"] },\n { city: \"ایذه\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"34\",\n details: [\n { city: \"باغملک\", letters: [\"ب\"] },\n { city: \"شوش\", letters: [\"ب\"] },\n { city: \"امیدیه\", letters: [\"ج\"] },\n { city: \"خرمشهر\", letters: [\"د\"] },\n { city: \"هندیجان\", letters: [\"د\"] },\n { city: \"اندیمشک\", letters: [\"س\"] },\n { city: \"لالی\", letters: [\"س\"] },\n { city: \"دزفول\", letters: [\"ص\", \"و\"] },\n { city: \"ماهشهر\", letters: [\"ط\"] },\n { city: \"آبادان\", letters: [\"ق\"] },\n { city: \"بهبهان\", letters: [\"ن\"] },\n { city: \"شوشتر\", letters: [\"ه\"] },\n { city: \"اهواز\", letters: [\"ی\"] },\n ],\n },\n ],\n },\n {\n province: \"زنجان\",\n codes: [\n {\n code: \"87\",\n details: [{ city: \"زنجان\", letters: [\"ب\", \"د\", \"ج\", \"س\", \"ص\", \"ط\"] }],\n },\n {\n code: \"97\",\n details: [\n { city: \"ابهر\", letters: [\"ب\", \"ق\"] },\n { city: \"خدابنده\", letters: [\"ج\"] },\n { city: \"خرمدره\", letters: [\"د\"] },\n { city: \"ایجرود\", letters: [\"س\"] },\n { city: \"طارم\", letters: [\"ص\"] },\n { city: \"ماهنشان\", letters: [\"ط\"] },\n ],\n },\n ],\n },\n {\n province: \"سمنان\",\n codes: [\n {\n code: \"86\",\n details: [{ city: \"سمنان\", letters: [\"ب\", \"د\", \"ج\"] }],\n },\n {\n code: \"96\",\n details: [\n { city: \"دامغان\", letters: [\"ب\"] },\n { city: \"شاهرود\", letters: [\"ج\", \"ط\"] },\n { city: \"گرمسار\", letters: [\"د\"] },\n { city: \"مهدیشهر\", letters: [\"س\"] },\n ],\n },\n ],\n },\n {\n province: \"سیستان و بلوچستان\",\n codes: [\n {\n code: \"85\",\n details: [{ city: \"زاهدان\", letters: [\"ب\", \"د\", \"ج\", \"س\", \"ص\", \"ط\"] }],\n },\n {\n code: \"95\",\n details: [\n { city: \"زابل\", letters: [\"ب\", \"ل\", \"و\"] },\n { city: \"ایرانشهر\", letters: [\"ج\", \"م\"] },\n { city: \"خاش\", letters: [\"د\"] },\n { city: \"سراوان\", letters: [\"س\", \"ن\"] },\n { city: \"نیکشهر\", letters: [\"ص\"] },\n { city: \"سرباز\", letters: [\"ط\"] },\n { city: \"چابهار\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"فارس\",\n codes: [\n {\n code: \"63\",\n details: [\n {\n city: \"شیراز\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"و\",\n \"ه\",\n \"ی\",\n ],\n },\n ],\n },\n {\n code: \"73\",\n details: [\n { city: \"جهرم\", letters: [\"ب\", \"ه\"] },\n { city: \"لارستان\", letters: [\"ج\"] },\n { city: \"داراب\", letters: [\"د\"] },\n { city: \"فسا\", letters: [\"س\"] },\n { city: \"کازرون\", letters: [\"ص\"] },\n { city: \"فیروزآباد\", letters: [\"ط\"] },\n { city: \"آباده\", letters: [\"ق\"] },\n { city: \"مرودشت\", letters: [\"ل\"] },\n { city: \"لامرد\", letters: [\"م\"] },\n { city: \"نیریز\", letters: [\"ن\"] },\n { city: \"اقلید\", letters: [\"ه\"] },\n { city: \"استهبان\", letters: [\"و\"] },\n { city: \"سپیدان\", letters: [\"ی\"] },\n { city: \"ممسنی\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"83\",\n details: [\n { city: \"ممسنی\", letters: [\"ب\"] },\n { city: \"شیراز و شهرهای دیگر\", letters: [\"ج\", \"ص\", \"ط\", \"ن\"] },\n { city: \"قیر و کارزین\", letters: [\"د\"] },\n { city: \"داراب، مهر، فیروزآباد\", letters: [\"س\"] },\n { city: \"آباده، بوانات\", letters: [\"ق\"] },\n { city: \"فراشبند\", letters: [\"ل\"] },\n { city: \"لارستان\", letters: [\"م\"] },\n { city: \"جهرم\", letters: [\"ه\"] },\n { city: \"مرودشت\", letters: [\"و\"] },\n { city: \"فسا\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"93\",\n details: [\n {\n city: \"شیراز\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"م\", \"ن\"],\n },\n { city: \"لارستان\", letters: [\"ل\"] },\n { city: \"شیراز و شهرهای دیگر\", letters: [\"و\", \"ی\"] },\n ],\n },\n ],\n },\n {\n province: \"قزوین\",\n codes: [\n {\n code: \"79\",\n details: [\n {\n city: \"قزوین\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"ل\", \"م\"],\n },\n ],\n },\n {\n code: \"89\",\n details: [\n { city: \"تاکستان\", letters: [\"ب\", \"س\"] },\n { city: \"بویین زهرا\", letters: [\"ج\"] },\n { city: \"آبیک\", letters: [\"د\"] },\n ],\n },\n ],\n },\n {\n province: \"قم\",\n codes: [\n {\n code: \"16\",\n details: [{ city: \"قم\", letters: [\"تمام حروف\"] }],\n },\n ],\n },\n {\n province: \"کردستان\",\n codes: [\n {\n code: \"51\",\n details: [\n {\n city: \"سنندج\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"ل\", \"م\", \"ن\", \"و\"],\n },\n ],\n },\n {\n code: \"61\",\n details: [\n { city: \"سقز\", letters: [\"ب\", \"م\"] },\n { city: \"بیجار\", letters: [\"ج\"] },\n { city: \"بانه\", letters: [\"د\", \"ه\"] },\n { city: \"قروه\", letters: [\"س\", \"ن\"] },\n { city: \"مریوان\", letters: [\"ص\", \"و\"] },\n { city: \"دیواندره\", letters: [\"ط\"] },\n { city: \"کامیاران\", letters: [\"ق\"] },\n { city: \"سروآباد\", letters: [\"ل\"] },\n ],\n },\n ],\n },\n {\n province: \"کرمان\",\n codes: [\n {\n code: \"45\",\n details: [\n {\n city: \"کرمان\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"ل\", \"م\", \"ن\"],\n },\n ],\n },\n {\n code: \"65\",\n details: [\n { city: \"رفسنجان\", letters: [\"ب\", \"ی\"] },\n { city: \"بم\", letters: [\"ج\"] },\n { city: \"سیرجان\", letters: [\"د\"] },\n { city: \"بافت\", letters: [\"س\"] },\n { city: \"جیرفت\", letters: [\"ص\"] },\n { city: \"زرند\", letters: [\"ط\"] },\n { city: \"کهنوج\", letters: [\"ق\"] },\n { city: \"شهر بابک\", letters: [\"ل\"] },\n { city: \"بردسیر\", letters: [\"م\"] },\n { city: \"منوجان\", letters: [\"ن\"] },\n { city: \"راور\", letters: [\"ه\"] },\n { city: \"عنبرآباد\", letters: [\"و\"] },\n ],\n },\n {\n code: \"75\",\n details: [\n { city: \"سیرجان\", letters: [\"ب\", \"ص\", \"م\"] },\n { city: \"بم\", letters: [\"ج\"] },\n { city: \"جیرفت\", letters: [\"د\"] },\n { city: \"رفسنجان\", letters: [\"س\", \"ل\"] },\n { city: \"زرند\", letters: [\"ط\"] },\n { city: \"کهنوج\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"کرمانشاه\",\n codes: [\n {\n code: \"19\",\n details: [\n {\n city: \"کرمانشاه\",\n letters: [\n \"ب\",\n \"ج\",\n \"د\",\n \"س\",\n \"ص\",\n \"ط\",\n \"ق\",\n \"ل\",\n \"م\",\n \"ن\",\n \"ه\",\n \"و\",\n ],\n },\n ],\n },\n {\n code: \"29\",\n details: [\n { city: \"اسلامآباد غرب\", letters: [\"ب\", \"ه\"] },\n { city: \"گیلان غرب\", letters: [\"ج\"] },\n { city: \"سرپلذهاب\", letters: [\"د\"] },\n { city: \"پاوه\", letters: [\"س\"] },\n { city: \"کنگاور\", letters: [\"ص\"] },\n { city: \"قصرشیرین\", letters: [\"ط\"] },\n { city: \"سنقر/سقز\", letters: [\"ق\"] },\n { city: \"جوانرود\", letters: [\"ل\"] },\n { city: \"صحنه\", letters: [\"م\"] },\n { city: \"هرسین\", letters: [\"ن\"] },\n { city: \"ثلاث باباجانی\", letters: [\"و\"] },\n ],\n },\n ],\n },\n {\n province: \"کهگیلویه و بویراحمد\",\n codes: [\n {\n code: \"49\",\n details: [\n { city: \"یاسوج\", letters: [\"ب\", \"ج\", \"د\"] },\n { city: \"گچساران\", letters: [\"ص\", \"ل\"] },\n { city: \"کهگیلویه\", letters: [\"ط\"] },\n { city: \"دنا\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"گلستان\",\n codes: [\n {\n code: \"59\",\n details: [\n { city: \"گلستان\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\"] },\n { city: \"گنبد کاووس\", letters: [\"ب\", \"ه\"] },\n { city: \"بندرترکمن\", letters: [\"ج\"] },\n { city: \"کردکوی\", letters: [\"د\"] },\n { city: \"علیآباد\", letters: [\"س\"] },\n { city: \"آزادشهر\", letters: [\"ص\"] },\n { city: \"مینودشت\", letters: [\"ط\"] },\n { city: \"بندرگز\", letters: [\"ق\"] },\n { city: \"رامیان\", letters: [\"ل\"] },\n { city: \"آققلا\", letters: [\"م\"] },\n { city: \"کلاله\", letters: [\"ن\"] },\n ],\n },\n ],\n },\n {\n province: \"گیلان\",\n codes: [\n {\n code: \"46\",\n details: [\n {\n city: \"رشت\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"ل\", \"م\", \"ن\", \"و\"],\n },\n ],\n },\n {\n code: \"56\",\n details: [\n { city: \"انزلی\", letters: [\"ب\"] },\n { city: \"لاهیجان\", letters: [\"ج\"] },\n { city: \"آستارا\", letters: [\"د\"] },\n { city: \"طالش\", letters: [\"س\"] },\n { city: \"رودسر\", letters: [\"ص\"] },\n { city: \"رودبار\", letters: [\"ط\"] },\n { city: \"صومعهسرا\", letters: [\"ق\"] },\n { city: \"فومن\", letters: [\"ل\"] },\n { city: \"لنگرود\", letters: [\"م\"] },\n { city: \"رضوانشهر\", letters: [\"ن\"] },\n { city: \"ماسال\", letters: [\"ه\"] },\n { city: \"املش\", letters: [\"و\"] },\n { city: \"شفت\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"76\",\n details: [\n { city: \"سیاهکل\", letters: [\"ب\"] },\n { city: \"آستانه\", letters: [\"ج\"] },\n { city: \"لاهیجان\", letters: [\"د\"] },\n { city: \"انزلی\", letters: [\"س\"] },\n { city: \"لنگرود\", letters: [\"ص\"] },\n { city: \"طالش\", letters: [\"ط\"] },\n { city: \"رودسر\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"لرستان\",\n codes: [\n {\n code: \"31\",\n details: [{ city: \"خرمآباد\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\"] }],\n },\n {\n code: \"41\",\n details: [\n { city: \"بروجرد\", letters: [\"ب\", \"م\", \"ن\"] },\n { city: \"الیگودرز\", letters: [\"ج\"] },\n { city: \"دورود\", letters: [\"د\", \"و\"] },\n { city: \"کوهدشت\", letters: [\"س\", \"و\"] },\n { city: \"دلفان\", letters: [\"ص\"] },\n { city: \"ازنا\", letters: [\"ط\"] },\n { city: \"پل دختر\", letters: [\"ق\"] },\n { city: \"سلسله\", letters: [\"ل\"] },\n ],\n },\n ],\n },\n {\n province: \"مازندران\",\n codes: [\n {\n code: \"62\",\n details: [{ city: \"ساری\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\"] }],\n },\n {\n code: \"72\",\n details: [\n { city: \"آمل\", letters: [\"ب\"] },\n { city: \"بابل\", letters: [\"ج\"] },\n { city: \"تنکابن\", letters: [\"د\"] },\n { city: \"رامسر\", letters: [\"س\"] },\n { city: \"نوشهر\", letters: [\"ص\"] },\n { city: \"نور\", letters: [\"ط\", \"ی\"] },\n { city: \"بهشهر\", letters: [\"ق\"] },\n { city: \"قائمشهر\", letters: [\"ل\"] },\n { city: \"بابلسر\", letters: [\"م\"] },\n { city: \"چالوس\", letters: [\"ن\"] },\n { city: \"نکا\", letters: [\"ه\"] },\n { city: \"محمودآباد\", letters: [\"و\"] },\n { city: \"جویبار\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"82\",\n details: [\n { city: \"سوادکوه\", letters: [\"ب\"] },\n { city: \"بابل\", letters: [\"ج\", \"ص\", \"م\"] },\n { city: \"آمل\", letters: [\"د\", \"ق\"] },\n { city: \"قائمشهر\", letters: [\"س\", \"ن\"] },\n { city: \"تنکابن\", letters: [\"ط\"] },\n { city: \"بابلسر\", letters: [\"ل\"] },\n { city: \"بهشهر\", letters: [\"ه\"] },\n { city: \"چالوس\", letters: [\"و\"] },\n { city: \"نوشهر\", letters: [\"ی\"] },\n ],\n },\n {\n code: \"92\",\n details: [\n { city: \"آمل\", letters: [\"ب\"] },\n { city: \"بابل\", letters: [\"ج\", \"ص\"] },\n { city: \"تنکابن\", letters: [\"د\"] },\n { city: \"قائمشهر\", letters: [\"س\"] },\n ],\n },\n ],\n },\n {\n province: \"مرکزی\",\n codes: [\n {\n code: \"47\",\n details: [\n { city: \"اراک\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\"] },\n ],\n },\n {\n code: \"57\",\n details: [\n { city: \"ساوه\", letters: [\"ب\", \"ه\", \"و\"] },\n { city: \"خمین\", letters: [\"ج\"] },\n { city: \"محلات\", letters: [\"د\"] },\n { city: \"تفرش\", letters: [\"س\"] },\n { city: \"دلیجان\", letters: [\"ص\"] },\n { city: \"آشتیان\", letters: [\"ط\"] },\n { city: \"شازند\", letters: [\"ق\"] },\n { city: \"زرندیه\", letters: [\"ل\"] },\n { city: \"کمیجان\", letters: [\"ن\"] },\n ],\n },\n ],\n },\n {\n province: \"هرمزگان\",\n codes: [\n {\n code: \"84\",\n details: [\n {\n city: \"بندرعباس\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"ل\"],\n },\n ],\n },\n {\n code: \"94\",\n details: [\n { city: \"میناب\", letters: [\"ب\", \"م\"] },\n { city: \"بندر لنگه\", letters: [\"ج\", \"ن\"] },\n { city: \"رودان\", letters: [\"د\"] },\n { city: \"ابوموسی\", letters: [\"س\"] },\n { city: \"جاسک\", letters: [\"ص\"] },\n { city: \"بستک\", letters: [\"ط\"] },\n { city: \"حاجیآباد\", letters: [\"ق\"] },\n { city: \"قشم\", letters: [\"ل\"] },\n ],\n },\n ],\n },\n {\n province: \"همدان\",\n codes: [\n {\n code: \"18\",\n details: [\n { city: \"همدان\", letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ق\", \"ل\", \"ط\"] },\n ],\n },\n {\n code: \"28\",\n details: [\n { city: \"نهاوند\", letters: [\"ب\", \"م\"] },\n { city: \"ملایر\", letters: [\"ج\", \"ل\", \"ن\"] },\n { city: \"تویسرکان\", letters: [\"د\"] },\n { city: \"کبودرآهنگ\", letters: [\"س\"] },\n { city: \"رزن\", letters: [\"ص\"] },\n { city: \"بهار\", letters: [\"ط\"] },\n { city: \"اسدآباد\", letters: [\"ق\"] },\n ],\n },\n ],\n },\n {\n province: \"یزد\",\n codes: [\n {\n code: \"54\",\n details: [\n {\n city: \"یزد\",\n letters: [\"ب\", \"ج\", \"د\", \"س\", \"ص\", \"ط\", \"ق\", \"ل\", \"م\", \"ن\"],\n },\n ],\n },\n {\n code: \"64\",\n details: [\n { city: \"اردکان\", letters: [\"ب\"] },\n { city: \"تفت\", letters: [\"ج\"] },\n { city: \"میبد\", letters: [\"د\"] },\n { city: \"بافق\", letters: [\"س\"] },\n { city: \"مهریز\", letters: [\"ص\"] },\n { city: \"ابرکوه\", letters: [\"ط\"] },\n { city: \"خاتم\", letters: [\"ل\"] },\n { city: \"صدوق (اشکذر)\", letters: [\"م\"] },\n ],\n },\n ],\n },\n] as const;\n","import { BANKS, MOBILE_OPERATORS, BILL_TYPES } from \"./data\";\nimport { PLATE_CITY_CODES } from \"./pelak-city-codes\";\n\nconst ALL_PROVINCES = PLATE_CITY_CODES as unknown as readonly {\n province: string;\n codes: readonly {\n code: string;\n details: readonly {\n city: string;\n letters: readonly string[];\n }[];\n }[];\n}[];\n\nexport function verifyAndNormalize(value: string): string {\n if (!value) return \"\";\n const PERSIAN_ZERO = 1776;\n const PERSIAN_NINE = 1785;\n const ARABIC_ZERO = 1632;\n const ARABIC_NINE = 1641;\n const ARABIC_YEH = 1610;\n const PERSIAN_YE = 1740;\n const ARABIC_KAF = 1603;\n const PERSIAN_KE = 1705;\n let result = \"\";\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n let char = value[i];\n if (code >= PERSIAN_ZERO && code <= PERSIAN_NINE) {\n char = String(code - PERSIAN_ZERO);\n } else if (code >= ARABIC_ZERO && code <= ARABIC_NINE) {\n char = String(code - ARABIC_ZERO);\n } else if (code === ARABIC_YEH) {\n char = String.fromCharCode(PERSIAN_YE);\n } else if (code === ARABIC_KAF) {\n char = String.fromCharCode(PERSIAN_KE);\n }\n result += char;\n }\n return result;\n}\n\nexport type BankInfo = {\n name: string;\n label: string;\n color: string;\n logo: string;\n formatted: string;\n} | null;\n\nexport function getBankInfo(cardNumber: string): BankInfo {\n const normalized = verifyAndNormalize(cardNumber).replace(/[\\-\\s]/g, \"\");\n if (normalized.length < 6) return null;\n const bin = normalized.substring(0, 6);\n // @ts-ignore\n const bank = BANKS[bin];\n if (!bank) return null;\n return {\n ...bank,\n formatted: normalized.replace(/(\\d{4})(?=\\d)/g, \"$1-\"),\n };\n}\n\nexport type OperatorInfo = {\n name: string;\n label: string;\n logo: string;\n} | null;\n\nexport function getMobileOperator(mobile: string): OperatorInfo {\n const normalized = verifyAndNormalize(mobile);\n let prefix = \"\";\n if (normalized.startsWith(\"09\")) {\n prefix = normalized.substring(0, 4);\n } else if (normalized.startsWith(\"9\")) {\n prefix = \"0\" + normalized.substring(0, 3);\n } else if (normalized.startsWith(\"+98\")) {\n prefix = \"0\" + normalized.substring(3, 6);\n }\n if (prefix.length !== 4) return null;\n for (const [key, op] of Object.entries(MOBILE_OPERATORS)) {\n // @ts-ignore\n if (op.prefixes.includes(prefix)) {\n return {\n name: key,\n label: op.label,\n logo: op.logo,\n };\n }\n }\n return null;\n}\n\nfunction calculateBillCheckDigit(code: string): number {\n let sum = 0;\n let weight = 2;\n for (let i = code.length - 1; i >= 0; i--) {\n sum += parseInt(code[i]) * weight;\n weight++;\n if (weight > 7) weight = 2;\n }\n const remainder = sum % 11;\n if (remainder === 0 || remainder === 1) return 0;\n return 11 - remainder;\n}\n\nexport function isBillIdValid(billId: string): boolean {\n const normalized = verifyAndNormalize(billId);\n if (!/^\\d{6,13}$/.test(normalized)) return false;\n const checkDigit = parseInt(normalized.slice(-1));\n const core = normalized.slice(0, -1);\n return calculateBillCheckDigit(core) === checkDigit;\n}\n\nexport function isPaymentIdValid(paymentId: string, billId: string): boolean {\n const nPay = verifyAndNormalize(paymentId);\n const nBill = verifyAndNormalize(billId);\n\n if (!/^\\d{6,13}$/.test(nPay) || !/^\\d{6,13}$/.test(nBill)) return false;\n\n const payCheckDigit1 = parseInt(nPay.slice(-2, -1));\n const payCore1 = nPay.slice(0, -2);\n if (calculateBillCheckDigit(payCore1) !== payCheckDigit1) return false;\n\n const payCheckDigit2 = parseInt(nPay.slice(-1));\n const combinedCore = nBill + nPay.slice(0, -1);\n return calculateBillCheckDigit(combinedCore) === payCheckDigit2;\n}\n\nexport type BillInfo = {\n type: { label: string; slug: string; color: string; logo: string };\n amount: number;\n formattedAmount: string;\n isValid: boolean;\n} | null;\n\nexport function getBillInfo(billId: string, paymentId?: string): BillInfo {\n const nBill = verifyAndNormalize(billId);\n\n // محدودیت طول برای جلوگیری از اشتباه با کدهای ۳۰ رقمی مالیاتی\n if (nBill.length < 6 || nBill.length > 13) return null;\n\n const typeDigit = parseInt(nBill.slice(-2, -1));\n // @ts-ignore\n const typeInfo = BILL_TYPES[typeDigit] || {\n label: \"نامشخص\",\n slug: \"unknown\",\n color: \"#333\",\n logo: \"\",\n };\n\n let amount = 0;\n let formattedAmount = \"0\";\n let isValid = isBillIdValid(nBill);\n\n if (paymentId) {\n const nPay = verifyAndNormalize(paymentId);\n\n if (!isPaymentIdValid(nPay, nBill)) {\n isValid = false;\n } else {\n // حذف ۵ رقم آخر برای محاسبه مبلغ\n const amountCore = nPay.slice(0, -5);\n if (amountCore.length > 0) {\n amount = parseInt(amountCore) * 1000;\n formattedAmount = new Intl.NumberFormat(\"fa-IR\").format(amount);\n }\n }\n }\n\n return { type: typeInfo, amount, formattedAmount, isValid };\n}\n\nexport type PlateInfo = {\n province: string;\n city: string;\n isValid: boolean;\n} | null;\n\nexport function getPlateInfo(plate: string): PlateInfo {\n const nPlate = verifyAndNormalize(plate).replace(/[\\s-]/g, \"\");\n const regex = /^(\\d{2})([\\u0600-\\u06FF]{1,3}|[A-Za-z])(\\d{3})(\\d{2})$/;\n const match = nPlate.match(regex);\n\n if (!match) return null;\n\n const letter = match[2];\n const cityCode = match[4];\n\n for (const provinceData of ALL_PROVINCES) {\n const codeEntry = provinceData.codes.find((c) => {\n const codeStr = c.code;\n if (codeStr.includes(\",\")) {\n return codeStr\n .split(\",\")\n .map((x) => x.trim())\n .includes(cityCode);\n }\n return codeStr === cityCode;\n });\n\n if (codeEntry) {\n const cityDetail = codeEntry.details.find((d) => {\n return d.letters.includes(letter) || d.letters.includes(\"تمام حروف\");\n });\n\n if (cityDetail) {\n return {\n province: provinceData.province,\n city: cityDetail.city,\n isValid: true,\n };\n }\n }\n }\n return null;\n}\n\nexport function isPlateNumber(plate: string): boolean {\n return getPlateInfo(plate) !== null;\n}\n\nexport function isMelliCode(code: string): boolean {\n const normalized = verifyAndNormalize(code);\n if (!/^\\d{10}$/.test(normalized)) return false;\n if (/^(\\d)\\1+$/.test(normalized)) return false;\n const check = parseInt(normalized[9]);\n const sum =\n normalized\n .substring(0, 9)\n .split(\"\")\n .reduce((acc, x, i) => acc + parseInt(x) * (10 - i), 0) % 11;\n return sum < 2 ? check === sum : check === 11 - sum;\n}\n\nexport function isShenaseMelli(code: string): boolean {\n const normalized = verifyAndNormalize(code);\n if (normalized.length !== 11 || !/^\\d{11}$/.test(normalized)) return false;\n const tenth = parseInt(normalized[9]);\n const inputCheck = parseInt(normalized[10]);\n const coefficients = [29, 27, 23, 19, 17, 29, 27, 23, 19, 17];\n let sum = 0;\n for (let i = 0; i < 10; i++) {\n const digit = parseInt(normalized[i]);\n sum += (digit + tenth + 2) * coefficients[i];\n }\n const remainder = sum % 11;\n const calculatedCheck = remainder === 10 ? 0 : remainder;\n return calculatedCheck === inputCheck;\n}\n\nexport function isPassport(code: string): boolean {\n const normalized = verifyAndNormalize(code);\n return /^[A-Za-z][0-9]{8,9}$/.test(normalized);\n}\n\nexport function isCardNumber(code: string): boolean {\n const normalized = verifyAndNormalize(code).replace(/[\\-\\s]/g, \"\");\n if (!/^\\d{16}$/.test(normalized)) return false;\n let sum = 0;\n let shouldDouble = false;\n for (let i = normalized.length - 1; i >= 0; i--) {\n let digit = parseInt(normalized[i]);\n if (shouldDouble) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n shouldDouble = !shouldDouble;\n }\n return sum % 10 === 0;\n}\n\ninterface MobileValidationOptions {\n strictZero?: boolean | \"optional\";\n}\nexport function isIranianMobile(\n mobile: string,\n { strictZero = \"optional\" }: MobileValidationOptions = {}\n): boolean {\n const normalized = verifyAndNormalize(mobile);\n const corePattern = \"9\\\\d{9}\";\n let pattern = \"\";\n if (strictZero === true) pattern = `^0${corePattern}$`;\n else if (strictZero === false) pattern = `^${corePattern}$`;\n else pattern = `^(?:0|\\\\+98)?${corePattern}$`;\n return new RegExp(pattern).test(normalized);\n}\n\nexport function isSheba(code: string): boolean {\n const normalized = verifyAndNormalize(code);\n const iban = normalized.toUpperCase().replace(/[\\-\\s]/g, \"\");\n if (iban.length !== 26 || !iban.startsWith(\"IR\")) return false;\n const newStr = iban.substring(4) + iban.substring(0, 4);\n const numericString = newStr\n .split(\"\")\n .map((c) => {\n const code = c.charCodeAt(0);\n return code >= 48 && code <= 57 ? c : (code - 55).toString();\n })\n .join(\"\");\n try {\n return BigInt(numericString) % BigInt(97) === BigInt(1);\n } catch {\n return false;\n }\n}\n\nexport function isPostalCode(code: string): boolean {\n const normalized = verifyAndNormalize(code);\n return /^[1-9]\\d{9}$/.test(normalized);\n}\n\nexport function isLandline(code: string): boolean {\n const normalized = verifyAndNormalize(code);\n return /^0\\d{2}\\d{8}$/.test(normalized);\n}\n","export const ERROR_MESSAGES = {\n fa: {\n melliCode: \"کد ملی نامعتبر است\",\n shenaseMelli: \"شناسه ملی نامعتبر است\",\n passport: \"شماره گذرنامه نامعتبر است\",\n cardNumber: \"شماره کارت نامعتبر است\",\n mobile: \"شماره موبایل نامعتبر است\",\n sheba: \"شماره شبا نامعتبر است\",\n postalCode: \"کد پستی نامعتبر است\",\n landline: \"شماره تلفن ثابت نامعتبر است\",\n billId: \"شناسه قبض نامعتبر است\",\n paymentId: \"شناسه پرداخت نامعتبر است\",\n plateNumber: \"پلاک خودرو نامعتبر است\",\n },\n en: {\n melliCode: \"Invalid national code\",\n shenaseMelli: \"Invalid legal person ID (Shenase Melli)\",\n passport: \"Invalid passport number\",\n cardNumber: \"Invalid card number\",\n mobile: \"Invalid mobile number\",\n sheba: \"Invalid Sheba (IBAN) number\",\n postalCode: \"Invalid postal code\",\n landline: \"Invalid landline number\",\n billId: \"Invalid Bill ID\",\n paymentId: \"Invalid Payment ID\",\n plateNumber: \"Invalid License Plate\",\n },\n} as const;\n\nexport type Language = keyof typeof ERROR_MESSAGES;\n\nexport interface BaseOptions {\n message?: string;\n locale?: Language;\n}\n\nexport const getMessage = (\n key: keyof typeof ERROR_MESSAGES[\"fa\"],\n options?: BaseOptions\n): string => {\n if (options?.message) return options.message;\n const lang = options?.locale || \"fa\";\n return ERROR_MESSAGES[lang][key];\n};"],"mappings":"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","names":["z","CDN_BANKS","CDN_OPERATORS","CDN_BILLS","BANKS","MOBILE_OPERATORS","BILL_TYPES","PLATE_CITY_CODES","ALL_PROVINCES","PLATE_CITY_CODES","verifyAndNormalize","value","PERSIAN_ZERO","PERSIAN_NINE","ARABIC_ZERO","ARABIC_NINE","ARABIC_YEH","PERSIAN_YE","ARABIC_KAF","PERSIAN_KE","result","i","code","char","getBankInfo","cardNumber","normalized","bin","bank","BANKS","getMobileOperator","mobile","prefix","key","op","MOBILE_OPERATORS","calculateBillCheckDigit","sum","weight","remainder","isBillIdValid","billId","checkDigit","core","isPaymentIdValid","paymentId","nPay","nBill","payCheckDigit1","payCore1","payCheckDigit2","combinedCore","getBillInfo","typeDigit","typeInfo","BILL_TYPES","amount","formattedAmount","isValid","amountCore","getPlateInfo","plate","nPlate","regex","match","letter","cityCode","provinceData","codeEntry","c","codeStr","x","cityDetail","d","isPlateNumber","isMelliCode","check","acc","isShenaseMelli","tenth","inputCheck","coefficients","digit","isPassport","isCardNumber","shouldDouble","isIranianMobile","strictZero","corePattern","pattern","isSheba","iban","numericString","isPostalCode","isLandline","ERROR_MESSAGES","getMessage","key","options","lang","zMelliCode","options","z","val","isMelliCode","getMessage","zShenaseMelli","isShenaseMelli","zPassport","isPassport","zCardNumber","isCardNumber","zIranianMobile","isIranianMobile","zSheba","isSheba","zPostalCode","isPostalCode","zLandline","isLandline","zBillId","isBillIdValid","zPaymentId","zPlateNumber","isPlateNumber","preprocessNumber","schema","verifyAndNormalize"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zod-ir",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Essential Zod validators for Iranian specific data (National Code, Card Number, Mobile)",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -12,14 +12,12 @@
|
|
|
12
12
|
"import": "./dist/index.mjs"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
15
18
|
"files": [
|
|
16
19
|
"dist"
|
|
17
20
|
],
|
|
18
|
-
"scripts": {
|
|
19
|
-
"test": "vitest run",
|
|
20
|
-
"build": "tsup",
|
|
21
|
-
"prepublishOnly": "npm run test && npm run build"
|
|
22
|
-
},
|
|
23
21
|
"keywords": [
|
|
24
22
|
"zod",
|
|
25
23
|
"validation",
|
|
@@ -51,12 +49,16 @@
|
|
|
51
49
|
"author": "Reza kheradmandi <r.kheradmandi70@gmail.com>",
|
|
52
50
|
"license": "MIT",
|
|
53
51
|
"devDependencies": {
|
|
54
|
-
"tsup": "
|
|
55
|
-
"typescript": "
|
|
56
|
-
"vitest": "
|
|
57
|
-
"zod": "
|
|
52
|
+
"tsup": "8.5.1",
|
|
53
|
+
"typescript": "5.9.3",
|
|
54
|
+
"vitest": "4.0.16",
|
|
55
|
+
"zod": "3.25.76"
|
|
58
56
|
},
|
|
59
57
|
"peerDependencies": {
|
|
60
58
|
"zod": ">=3"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"test": "vitest run",
|
|
62
|
+
"build": "tsup"
|
|
61
63
|
}
|
|
62
|
-
}
|
|
64
|
+
}
|