@prashanttiw/pramana 1.0.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.
@@ -0,0 +1,261 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+
5
+ // src/zod/index.ts
6
+
7
+ // src/utils/verhoeff.ts
8
+ var d = [
9
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
10
+ [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],
11
+ [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],
12
+ [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],
13
+ [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],
14
+ [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],
15
+ [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],
16
+ [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],
17
+ [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],
18
+ [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
19
+ ];
20
+ var p = [
21
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
22
+ [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],
23
+ [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],
24
+ [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],
25
+ [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],
26
+ [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],
27
+ [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],
28
+ [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]
29
+ ];
30
+ var validateVerhoeff = (numStr) => {
31
+ if (numStr == null || typeof numStr !== "string") return false;
32
+ if (!/^\d+$/.test(numStr)) return false;
33
+ let c = 0;
34
+ const myArray = numStr.split("").map(Number).reverse();
35
+ for (let i = 0; i < myArray.length; i++) {
36
+ c = d[c][p[i % 8][myArray[i]]];
37
+ }
38
+ return c === 0;
39
+ };
40
+
41
+ // src/validators/aadhaar.ts
42
+ var isValidAadhaar = (aadhaar) => {
43
+ if (aadhaar == null) return false;
44
+ if (typeof aadhaar !== "string") return false;
45
+ if (!/^\d{12}$/.test(aadhaar)) return false;
46
+ if (/^[01]/.test(aadhaar)) return false;
47
+ return validateVerhoeff(aadhaar);
48
+ };
49
+
50
+ // src/validators/pan.ts
51
+ var isValidPAN = (pan) => {
52
+ if (pan == null) return false;
53
+ if (typeof pan !== "string") return false;
54
+ const regex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;
55
+ if (!regex.test(pan)) return false;
56
+ const fourthChar = pan.charAt(3);
57
+ const validEntityTypes = ["C", "P", "H", "F", "A", "T", "B", "L", "J", "G"];
58
+ if (!validEntityTypes.includes(fourthChar)) return false;
59
+ return true;
60
+ };
61
+
62
+ // src/utils/mod36.ts
63
+ var CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
64
+ var generateGSTCheckDigit = (gstinBase) => {
65
+ if (gstinBase == null || typeof gstinBase !== "string") return -1;
66
+ if (gstinBase.length !== 14) return -1;
67
+ const input = gstinBase.toUpperCase();
68
+ let sum = 0;
69
+ for (let i = 0; i < 14; i++) {
70
+ const charValue = CHARSET.indexOf(input[i]);
71
+ if (charValue < 0) return -1;
72
+ const weight = i % 2 + 1;
73
+ const product = charValue * weight;
74
+ sum += Math.floor(product / 36) + product % 36;
75
+ }
76
+ const checkDigitIndex = (36 - sum % 36) % 36;
77
+ return checkDigitIndex;
78
+ };
79
+ var validateGSTCheckDigit = (gstin) => {
80
+ if (gstin == null || typeof gstin !== "string") return false;
81
+ if (gstin.length !== 15) return false;
82
+ const input = gstin.toUpperCase();
83
+ const gstinBase = input.substring(0, 14);
84
+ const providedCheckDigit = input.charAt(14);
85
+ const expectedCheckDigitIndex = generateGSTCheckDigit(gstinBase);
86
+ if (expectedCheckDigitIndex < 0) return false;
87
+ const expectedCheckDigit = CHARSET[expectedCheckDigitIndex];
88
+ return providedCheckDigit === expectedCheckDigit;
89
+ };
90
+
91
+ // src/validators/gstin.ts
92
+ var isValidGSTIN = (gstin) => {
93
+ if (gstin == null) return false;
94
+ if (typeof gstin !== "string") return false;
95
+ const regex = /^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/;
96
+ if (!regex.test(gstin)) return false;
97
+ return validateGSTCheckDigit(gstin);
98
+ };
99
+
100
+ // src/data/banks.ts
101
+ var BANK_CODES = /* @__PURE__ */ new Set([
102
+ "SBIN",
103
+ // State Bank of India
104
+ "HDFC",
105
+ // HDFC Bank
106
+ "ICIC",
107
+ // ICICI Bank
108
+ "UTIB",
109
+ // Axis Bank
110
+ "PUNB",
111
+ // Punjab National Bank
112
+ "BKID",
113
+ // Bank of India
114
+ "BARB",
115
+ // Bank of Baroda
116
+ "CNRB",
117
+ // Canara Bank
118
+ "UBIN",
119
+ // Union Bank of India
120
+ "IOBA",
121
+ // Indian Overseas Bank
122
+ "IDIB",
123
+ // Indian Bank
124
+ "CBIN",
125
+ // Central Bank of India
126
+ "MAHB",
127
+ // Bank of Maharashtra
128
+ "ORBC",
129
+ // Oriental Bank of Commerce (Merged)
130
+ "ALLA",
131
+ // Allahabad Bank (Merged)
132
+ "ANDB",
133
+ // Andhra Bank (Merged)
134
+ "SYNB",
135
+ // Syndicate Bank (Merged)
136
+ "CORP",
137
+ // Corporation Bank (Merged)
138
+ "VYSA",
139
+ // ING Vysya (Merged)
140
+ "KKBK",
141
+ // Kotak Mahindra Bank
142
+ "YESB",
143
+ // Yes Bank
144
+ "INDB",
145
+ // IndusInd Bank
146
+ "FDRL"
147
+ // Federal Bank
148
+ ]);
149
+
150
+ // src/validators/ifsc.ts
151
+ var isValidIFSC = (ifsc) => {
152
+ if (ifsc == null) return false;
153
+ if (typeof ifsc !== "string") return false;
154
+ const regex = /^[A-Z]{4}0[A-Z0-9]{6}$/;
155
+ if (!regex.test(ifsc)) return false;
156
+ const bankCode = ifsc.substring(0, 4);
157
+ return BANK_CODES.has(bankCode);
158
+ };
159
+
160
+ // src/data/pincodes.ts
161
+ var PINCODE_REGIONS = {
162
+ "11": "Delhi",
163
+ "12": "Haryana",
164
+ "13": "Haryana",
165
+ "14": "Punjab",
166
+ "15": "Punjab",
167
+ "16": "Chandigarh",
168
+ "17": "Himachal Pradesh",
169
+ "18": "Jammu & Kashmir",
170
+ "19": "Jammu & Kashmir",
171
+ "20": "Uttar Pradesh",
172
+ "21": "Uttar Pradesh",
173
+ "22": "Uttar Pradesh",
174
+ "23": "Uttar Pradesh",
175
+ "24": "Uttar Pradesh",
176
+ "25": "Uttar Pradesh",
177
+ "26": "Uttar Pradesh",
178
+ "27": "Uttar Pradesh",
179
+ "28": "Uttar Pradesh",
180
+ "30": "Rajasthan",
181
+ "31": "Rajasthan",
182
+ "32": "Rajasthan",
183
+ "33": "Rajasthan",
184
+ "34": "Rajasthan",
185
+ "36": "Gujarat",
186
+ "37": "Gujarat",
187
+ "38": "Gujarat",
188
+ "39": "Gujarat",
189
+ "40": "Maharashtra",
190
+ "41": "Maharashtra",
191
+ "42": "Maharashtra",
192
+ "43": "Maharashtra",
193
+ "44": "Maharashtra",
194
+ // ... (Can expand list)
195
+ "50": "Telangana",
196
+ "51": "Andhra Pradesh",
197
+ "52": "Andhra Pradesh",
198
+ "53": "Andhra Pradesh",
199
+ "56": "Karnataka",
200
+ "57": "Karnataka",
201
+ "58": "Karnataka",
202
+ "59": "Karnataka",
203
+ "60": "Tamil Nadu",
204
+ "61": "Tamil Nadu",
205
+ "62": "Tamil Nadu",
206
+ "63": "Tamil Nadu",
207
+ "64": "Tamil Nadu",
208
+ "67": "Kerala",
209
+ "68": "Kerala",
210
+ "69": "Kerala",
211
+ "70": "West Bengal",
212
+ "71": "West Bengal",
213
+ "72": "West Bengal",
214
+ "73": "West Bengal",
215
+ "74": "West Bengal",
216
+ "78": "Assam",
217
+ "79": "North East",
218
+ "80": "Bihar",
219
+ "81": "Bihar",
220
+ "82": "Bihar",
221
+ "83": "Jharkhand",
222
+ "84": "Bihar",
223
+ "85": "Bihar",
224
+ "90": "Army Postal Service",
225
+ "99": "Army Postal Service"
226
+ };
227
+
228
+ // src/validators/pincode.ts
229
+ var isValidPincode = (pincode) => {
230
+ if (pincode == null) return false;
231
+ if (typeof pincode !== "string") return false;
232
+ const regex = /^[1-9][0-9]{5}$/;
233
+ if (!regex.test(pincode)) return false;
234
+ const regionKey = pincode.substring(0, 2);
235
+ return Object.prototype.hasOwnProperty.call(PINCODE_REGIONS, regionKey);
236
+ };
237
+
238
+ // src/zod/index.ts
239
+ var aadhaarSchema = zod.z.string().refine(isValidAadhaar, {
240
+ message: "Invalid Aadhaar Number"
241
+ });
242
+ var panSchema = zod.z.string().refine(isValidPAN, {
243
+ message: "Invalid PAN Number"
244
+ });
245
+ var gstinSchema = zod.z.string().refine(isValidGSTIN, {
246
+ message: "Invalid GSTIN Number"
247
+ });
248
+ var ifscSchema = zod.z.string().refine(isValidIFSC, {
249
+ message: "Invalid IFSC Code"
250
+ });
251
+ var pincodeSchema = zod.z.string().refine(isValidPincode, {
252
+ message: "Invalid Pincode"
253
+ });
254
+
255
+ exports.aadhaarSchema = aadhaarSchema;
256
+ exports.gstinSchema = gstinSchema;
257
+ exports.ifscSchema = ifscSchema;
258
+ exports.panSchema = panSchema;
259
+ exports.pincodeSchema = pincodeSchema;
260
+ //# sourceMappingURL=index.js.map
261
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/verhoeff.ts","../../src/validators/aadhaar.ts","../../src/validators/pan.ts","../../src/utils/mod36.ts","../../src/validators/gstin.ts","../../src/data/banks.ts","../../src/validators/ifsc.ts","../../src/data/pincodes.ts","../../src/validators/pincode.ts","../../src/zod/index.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * The multiplication table\r\n */\r\nconst d = [\r\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\r\n [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\r\n [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\r\n [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\r\n [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\r\n [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\r\n [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\r\n [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\r\n [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\r\n];\r\n\r\n/**\r\n * The permutation table\r\n */\r\nconst p = [\r\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\r\n [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\r\n [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\r\n [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\r\n [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\r\n [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\r\n [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\r\n];\r\n\r\n/**\r\n * The inverse table\r\n */\r\nconst inv = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];\r\n\r\n/**\r\n * Validates a number string using the Verhoeff algorithm.\r\n * @param numStr The number string to validate.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const validateVerhoeff = (numStr: any): boolean => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (numStr == null || typeof numStr !== 'string') return false;\r\n if (!/^\\d+$/.test(numStr)) return false;\r\n\r\n let c = 0;\r\n const myArray = numStr.split('').map(Number).reverse();\r\n\r\n for (let i = 0; i < myArray.length; i++) {\r\n c = d[c][p[i % 8][myArray[i]]];\r\n }\r\n\r\n return c === 0;\r\n};\r\n\r\n/**\r\n * Generates the Verhoeff checksum digit for a given number string.\r\n * @param numStr The number string (without the checksum).\r\n * @returns The checksum digit.\r\n */\r\nexport const generateVerhoeff = (numStr: any): number => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (numStr == null || typeof numStr !== 'string') {\r\n throw new Error('Input must be a non-null string');\r\n }\r\n if (!/^\\d+$/.test(numStr)) {\r\n throw new Error('Input must be a numeric string');\r\n }\r\n\r\n let c = 0;\r\n const myArray = numStr.split('').map(Number).reverse();\r\n\r\n for (let i = 0; i < myArray.length; i++) {\r\n c = d[c][p[(i + 1) % 8][myArray[i]]];\r\n }\r\n\r\n return inv[c];\r\n};\r\n","import { validateVerhoeff } from '../utils/verhoeff';\r\n\r\n/**\r\n * Validates an Aadhaar number.\r\n * @param aadhaar The 12-digit Aadhaar number string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidAadhaar = (aadhaar: any): boolean => {\r\n // 0. Null/undefined check\r\n if (aadhaar == null) return false;\r\n if (typeof aadhaar !== 'string') return false;\r\n \r\n // 1. Structure: 12 digits\r\n if (!/^\\d{12}$/.test(aadhaar)) return false;\r\n\r\n // 2. Logic: Should not start with 0 or 1\r\n if (/^[01]/.test(aadhaar)) return false;\r\n\r\n // 3. Algorithm: Verhoeff Checksum\r\n return validateVerhoeff(aadhaar);\r\n};\r\n","/**\r\n * Validates a Permanent Account Number (PAN).\r\n * @param pan The 10-character PAN string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidPAN = (pan: any): boolean => {\r\n // 0. Null/undefined check\r\n if (pan == null) return false;\r\n if (typeof pan !== 'string') return false;\r\n \r\n // 1. Structure: 5 chars, 4 digits, 1 char using Regex\r\n const regex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;\r\n if (!regex.test(pan)) return false;\r\n\r\n // 2. Logic: 4th character must be one of the valid entity types\r\n const fourthChar = pan.charAt(3);\r\n const validEntityTypes = ['C', 'P', 'H', 'F', 'A', 'T', 'B', 'L', 'J', 'G'];\r\n\r\n if (!validEntityTypes.includes(fourthChar)) return false;\r\n\r\n return true;\r\n};\r\n\r\nexport interface PANInfo {\r\n valid: boolean;\r\n category?: string; // Code (P, C, etc.)\r\n categoryDesc?: string; // Description (Person, Company)\r\n}\r\n\r\nconst PAN_CATEGORY_MAP: Record<string, string> = {\r\n 'C': 'Company',\r\n 'P': 'Person',\r\n 'H': 'Hindu Undivided Family (HUF)',\r\n 'F': 'Firm',\r\n 'A': 'Association of Persons (AOP)',\r\n 'T': 'AOP (Trust)',\r\n 'B': 'Body of Individuals (BOI)',\r\n 'L': 'Local Authority',\r\n 'J': 'Artificial Juridical Person',\r\n 'G': 'Government',\r\n};\r\n\r\n/**\r\n * Extracts metadata from a PAN number.\r\n * @param pan The PAN string.\r\n * @returns Object containing validity and metadata.\r\n */\r\nexport const getPANInfo = (pan: string): PANInfo => {\r\n if (!isValidPAN(pan)) {\r\n return { valid: false };\r\n }\r\n\r\n const category = pan.charAt(3);\r\n return {\r\n valid: true,\r\n category,\r\n categoryDesc: PAN_CATEGORY_MAP[category] || 'Unknown',\r\n };\r\n};\r\n","/**\r\n * Character set for Mod-36 checksum: 0-9, A-Z\r\n * Used in GSTIN validation (GST Identification Number)\r\n */\r\nconst CHARSET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * Generates the Mod-36 check digit for a 14-character GSTIN base.\r\n * \r\n * Algorithm:\r\n * 1. For each of the 14 characters (left to right, 0-indexed):\r\n * - Convert character to numeric value (0-35)\r\n * - Multiply by weight: weight = (index % 2) + 1, alternating 1, 2, 1, 2...\r\n * - Calculate: quotient = product / 36, remainder = product % 36\r\n * - Add quotient + remainder to sum\r\n * 2. Calculate check digit index: (36 - (sum % 36)) % 36\r\n * 3. Map index back to character\r\n * \r\n * Reference: Official GSTIN format specification (Ministry of Finance, India)\r\n * \r\n * @param gstinBase The first 14 characters of GSTIN (excluding check digit)\r\n * @returns The check digit index (0-35), or -1 if input is invalid\r\n */\r\nexport const generateGSTCheckDigit = (gstinBase: any): number => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (gstinBase == null || typeof gstinBase !== 'string') return -1;\r\n if (gstinBase.length !== 14) return -1;\r\n \r\n const input = gstinBase.toUpperCase();\r\n let sum = 0;\r\n\r\n for (let i = 0; i < 14; i++) {\r\n const charValue = CHARSET.indexOf(input[i]);\r\n if (charValue < 0) return -1; // Invalid character\r\n\r\n // Weight alternates: 1, 2, 1, 2, ... (for positions 0, 1, 2, 3, ...)\r\n const weight = (i % 2) + 1;\r\n const product = charValue * weight;\r\n \r\n // Add both quotient and remainder\r\n sum += Math.floor(product / 36) + (product % 36);\r\n }\r\n\r\n // Check digit index = (36 - (sum mod 36)) mod 36\r\n const checkDigitIndex = (36 - (sum % 36)) % 36;\r\n return checkDigitIndex;\r\n};\r\n\r\n/**\r\n * Validates a GSTIN using Mod-36 Checksum Algorithm.\r\n * \r\n * @param gstin The 15-character GSTIN string to validate\r\n * @returns True if the check digit is valid, false otherwise\r\n */\r\nexport const validateGSTCheckDigit = (gstin: any): boolean => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (gstin == null || typeof gstin !== 'string') return false;\r\n if (gstin.length !== 15) return false;\r\n \r\n const input = gstin.toUpperCase();\r\n const gstinBase = input.substring(0, 14);\r\n const providedCheckDigit = input.charAt(14);\r\n \r\n // Generate expected check digit\r\n const expectedCheckDigitIndex = generateGSTCheckDigit(gstinBase);\r\n if (expectedCheckDigitIndex < 0) return false;\r\n \r\n const expectedCheckDigit = CHARSET[expectedCheckDigitIndex];\r\n return providedCheckDigit === expectedCheckDigit;\r\n};\r\n","import { validateGSTCheckDigit } from '../utils/mod36';\r\nimport { GST_STATE_CODES } from '../data/gst_states';\r\n\r\n/**\r\n * Validates a GSTIN.\r\n * @param gstin The 15-character GSTIN string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidGSTIN = (gstin: any): boolean => {\r\n // 0. Null/undefined check\r\n if (gstin == null) return false;\r\n if (typeof gstin !== 'string') return false;\r\n \r\n // 1. Basic Regex Structure\r\n const regex = /^\\d{2}[A-Z]{5}\\d{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/;\r\n\r\n if (!regex.test(gstin)) return false;\r\n\r\n // 2. Validate Mod-36 Check Digit\r\n return validateGSTCheckDigit(gstin);\r\n};\r\n\r\nexport interface GSTINInfo {\r\n valid: boolean;\r\n state?: string;\r\n stateCode?: string;\r\n}\r\n\r\n/**\r\n * Extracts metadata from a GSTIN.\r\n * @param gstin The GSTIN string.\r\n * @returns Object containing validity and metadata (State Name).\r\n */\r\nexport const getGSTINInfo = (gstin: string): GSTINInfo => {\r\n if (!isValidGSTIN(gstin)) {\r\n return { valid: false };\r\n }\r\n\r\n const stateCode = gstin.substring(0, 2);\r\n\r\n return {\r\n valid: true,\r\n stateCode,\r\n state: GST_STATE_CODES[stateCode] || 'Unknown State',\r\n };\r\n};\r\n","/**\r\n * A compressed set of popular/valid bank codes (First 4 chars of IFSC).\r\n * This is not exhaustive but covers major banks to demonstrate the pattern.\r\n * In a real scenario, this would be auto-generated from RBI master list.\r\n */\r\nexport const BANK_CODES = new Set([\r\n 'SBIN', // State Bank of India\r\n 'HDFC', // HDFC Bank\r\n 'ICIC', // ICICI Bank\r\n 'UTIB', // Axis Bank\r\n 'PUNB', // Punjab National Bank\r\n 'BKID', // Bank of India\r\n 'BARB', // Bank of Baroda\r\n 'CNRB', // Canara Bank\r\n 'UBIN', // Union Bank of India\r\n 'IOBA', // Indian Overseas Bank\r\n 'IDIB', // Indian Bank\r\n 'CBIN', // Central Bank of India\r\n 'MAHB', // Bank of Maharashtra\r\n 'ORBC', // Oriental Bank of Commerce (Merged)\r\n 'ALLA', // Allahabad Bank (Merged)\r\n 'ANDB', // Andhra Bank (Merged)\r\n 'SYNB', // Syndicate Bank (Merged)\r\n 'CORP', // Corporation Bank (Merged)\r\n 'VYSA', // ING Vysya (Merged)\r\n 'KKBK', // Kotak Mahindra Bank\r\n 'YESB', // Yes Bank\r\n 'INDB', // IndusInd Bank\r\n 'FDRL', // Federal Bank\r\n]);\r\n","import { BANK_CODES } from '../data/banks';\r\n\r\n/**\r\n * Validates an IFSC Code.\r\n * @param ifsc The 11-character IFSC string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidIFSC = (ifsc: any): boolean => {\r\n // 0. Null/undefined check\r\n if (ifsc == null) return false;\r\n if (typeof ifsc !== 'string') return false;\r\n \r\n // 1. Structure: 4 chars, 0, 6 chars (alphanumeric)\r\n const regex = /^[A-Z]{4}0[A-Z0-9]{6}$/;\r\n if (!regex.test(ifsc)) return false;\r\n\r\n // 2. Knowledge: Check if the Bank Code (first 4 chars) is known\r\n const bankCode = ifsc.substring(0, 4);\r\n\r\n // In strict mode, we only allow known banks.\r\n // In permissive mode (if we hadn't hardcoded), we'd skip.\r\n // For this library, we want high performance validation, so checking the Set is fast.\r\n return BANK_CODES.has(bankCode);\r\n};\r\n","/**\r\n * Mapping of first 2 digits of Pincode to Region/Circle.\r\n */\r\nexport const PINCODE_REGIONS: Record<string, string> = {\r\n '11': 'Delhi',\r\n '12': 'Haryana',\r\n '13': 'Haryana',\r\n '14': 'Punjab',\r\n '15': 'Punjab',\r\n '16': 'Chandigarh',\r\n '17': 'Himachal Pradesh',\r\n '18': 'Jammu & Kashmir',\r\n '19': 'Jammu & Kashmir',\r\n '20': 'Uttar Pradesh',\r\n '21': 'Uttar Pradesh',\r\n '22': 'Uttar Pradesh',\r\n '23': 'Uttar Pradesh',\r\n '24': 'Uttar Pradesh',\r\n '25': 'Uttar Pradesh',\r\n '26': 'Uttar Pradesh',\r\n '27': 'Uttar Pradesh',\r\n '28': 'Uttar Pradesh',\r\n '30': 'Rajasthan',\r\n '31': 'Rajasthan',\r\n '32': 'Rajasthan',\r\n '33': 'Rajasthan',\r\n '34': 'Rajasthan',\r\n '36': 'Gujarat',\r\n '37': 'Gujarat',\r\n '38': 'Gujarat',\r\n '39': 'Gujarat',\r\n '40': 'Maharashtra',\r\n '41': 'Maharashtra',\r\n '42': 'Maharashtra',\r\n '43': 'Maharashtra',\r\n '44': 'Maharashtra',\r\n // ... (Can expand list)\r\n '50': 'Telangana',\r\n '51': 'Andhra Pradesh',\r\n '52': 'Andhra Pradesh',\r\n '53': 'Andhra Pradesh',\r\n '56': 'Karnataka',\r\n '57': 'Karnataka',\r\n '58': 'Karnataka',\r\n '59': 'Karnataka',\r\n '60': 'Tamil Nadu',\r\n '61': 'Tamil Nadu',\r\n '62': 'Tamil Nadu',\r\n '63': 'Tamil Nadu',\r\n '64': 'Tamil Nadu',\r\n '67': 'Kerala',\r\n '68': 'Kerala',\r\n '69': 'Kerala',\r\n '70': 'West Bengal',\r\n '71': 'West Bengal',\r\n '72': 'West Bengal',\r\n '73': 'West Bengal',\r\n '74': 'West Bengal',\r\n '78': 'Assam',\r\n '79': 'North East',\r\n '80': 'Bihar',\r\n '81': 'Bihar',\r\n '82': 'Bihar',\r\n '83': 'Jharkhand',\r\n '84': 'Bihar',\r\n '85': 'Bihar',\r\n '90': 'Army Postal Service',\r\n '99': 'Army Postal Service',\r\n};\r\n","import { PINCODE_REGIONS } from '../data/pincodes';\r\n\r\n/**\r\n * Validates an Indian Pincode.\r\n * @param pincode The 6-digit Pincode string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidPincode = (pincode: any): boolean => {\r\n // 0. Null/undefined check\r\n if (pincode == null) return false;\r\n if (typeof pincode !== 'string') return false;\r\n \r\n // 1. Structure: 6 digits, first digit 1-9\r\n const regex = /^[1-9][0-9]{5}$/;\r\n if (!regex.test(pincode)) return false;\r\n\r\n // 2. Knowledge: Check if the Region (first 2 digits) exists in our map\r\n const regionKey = pincode.substring(0, 2);\r\n return Object.prototype.hasOwnProperty.call(PINCODE_REGIONS, regionKey);\r\n};\r\n\r\nexport interface PincodeInfo {\r\n valid: boolean;\r\n region?: string;\r\n}\r\n\r\n/**\r\n * Extracts metadata from a Pincode.\r\n * @param pincode The Pincode string.\r\n * @returns Object containing validity and region info.\r\n */\r\nexport const getPincodeInfo = (pincode: string): PincodeInfo => {\r\n if (!isValidPincode(pincode)) {\r\n return { valid: false };\r\n }\r\n\r\n const regionKey = pincode.substring(0, 2);\r\n return {\r\n valid: true,\r\n region: PINCODE_REGIONS[regionKey] || 'Unknown Region',\r\n };\r\n};\r\n","import { z } from 'zod';\r\nimport {\r\n isValidAadhaar,\r\n isValidPAN,\r\n isValidGSTIN,\r\n isValidIFSC,\r\n isValidPincode\r\n} from '../validators';\r\n\r\nexport const aadhaarSchema = z.string().refine(isValidAadhaar, {\r\n message: \"Invalid Aadhaar Number\",\r\n});\r\n\r\nexport const panSchema = z.string().refine(isValidPAN, {\r\n message: \"Invalid PAN Number\",\r\n});\r\n\r\nexport const gstinSchema = z.string().refine(isValidGSTIN, {\r\n message: \"Invalid GSTIN Number\",\r\n});\r\n\r\nexport const ifscSchema = z.string().refine(isValidIFSC, {\r\n message: \"Invalid IFSC Code\",\r\n});\r\n\r\nexport const pincodeSchema = z.string().refine(isValidPincode, {\r\n message: \"Invalid Pincode\",\r\n});\r\n"]}
@@ -0,0 +1,255 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/zod/index.ts
4
+
5
+ // src/utils/verhoeff.ts
6
+ var d = [
7
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
8
+ [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],
9
+ [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],
10
+ [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],
11
+ [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],
12
+ [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],
13
+ [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],
14
+ [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],
15
+ [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],
16
+ [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
17
+ ];
18
+ var p = [
19
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
20
+ [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],
21
+ [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],
22
+ [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],
23
+ [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],
24
+ [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],
25
+ [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],
26
+ [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]
27
+ ];
28
+ var validateVerhoeff = (numStr) => {
29
+ if (numStr == null || typeof numStr !== "string") return false;
30
+ if (!/^\d+$/.test(numStr)) return false;
31
+ let c = 0;
32
+ const myArray = numStr.split("").map(Number).reverse();
33
+ for (let i = 0; i < myArray.length; i++) {
34
+ c = d[c][p[i % 8][myArray[i]]];
35
+ }
36
+ return c === 0;
37
+ };
38
+
39
+ // src/validators/aadhaar.ts
40
+ var isValidAadhaar = (aadhaar) => {
41
+ if (aadhaar == null) return false;
42
+ if (typeof aadhaar !== "string") return false;
43
+ if (!/^\d{12}$/.test(aadhaar)) return false;
44
+ if (/^[01]/.test(aadhaar)) return false;
45
+ return validateVerhoeff(aadhaar);
46
+ };
47
+
48
+ // src/validators/pan.ts
49
+ var isValidPAN = (pan) => {
50
+ if (pan == null) return false;
51
+ if (typeof pan !== "string") return false;
52
+ const regex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;
53
+ if (!regex.test(pan)) return false;
54
+ const fourthChar = pan.charAt(3);
55
+ const validEntityTypes = ["C", "P", "H", "F", "A", "T", "B", "L", "J", "G"];
56
+ if (!validEntityTypes.includes(fourthChar)) return false;
57
+ return true;
58
+ };
59
+
60
+ // src/utils/mod36.ts
61
+ var CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
62
+ var generateGSTCheckDigit = (gstinBase) => {
63
+ if (gstinBase == null || typeof gstinBase !== "string") return -1;
64
+ if (gstinBase.length !== 14) return -1;
65
+ const input = gstinBase.toUpperCase();
66
+ let sum = 0;
67
+ for (let i = 0; i < 14; i++) {
68
+ const charValue = CHARSET.indexOf(input[i]);
69
+ if (charValue < 0) return -1;
70
+ const weight = i % 2 + 1;
71
+ const product = charValue * weight;
72
+ sum += Math.floor(product / 36) + product % 36;
73
+ }
74
+ const checkDigitIndex = (36 - sum % 36) % 36;
75
+ return checkDigitIndex;
76
+ };
77
+ var validateGSTCheckDigit = (gstin) => {
78
+ if (gstin == null || typeof gstin !== "string") return false;
79
+ if (gstin.length !== 15) return false;
80
+ const input = gstin.toUpperCase();
81
+ const gstinBase = input.substring(0, 14);
82
+ const providedCheckDigit = input.charAt(14);
83
+ const expectedCheckDigitIndex = generateGSTCheckDigit(gstinBase);
84
+ if (expectedCheckDigitIndex < 0) return false;
85
+ const expectedCheckDigit = CHARSET[expectedCheckDigitIndex];
86
+ return providedCheckDigit === expectedCheckDigit;
87
+ };
88
+
89
+ // src/validators/gstin.ts
90
+ var isValidGSTIN = (gstin) => {
91
+ if (gstin == null) return false;
92
+ if (typeof gstin !== "string") return false;
93
+ const regex = /^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/;
94
+ if (!regex.test(gstin)) return false;
95
+ return validateGSTCheckDigit(gstin);
96
+ };
97
+
98
+ // src/data/banks.ts
99
+ var BANK_CODES = /* @__PURE__ */ new Set([
100
+ "SBIN",
101
+ // State Bank of India
102
+ "HDFC",
103
+ // HDFC Bank
104
+ "ICIC",
105
+ // ICICI Bank
106
+ "UTIB",
107
+ // Axis Bank
108
+ "PUNB",
109
+ // Punjab National Bank
110
+ "BKID",
111
+ // Bank of India
112
+ "BARB",
113
+ // Bank of Baroda
114
+ "CNRB",
115
+ // Canara Bank
116
+ "UBIN",
117
+ // Union Bank of India
118
+ "IOBA",
119
+ // Indian Overseas Bank
120
+ "IDIB",
121
+ // Indian Bank
122
+ "CBIN",
123
+ // Central Bank of India
124
+ "MAHB",
125
+ // Bank of Maharashtra
126
+ "ORBC",
127
+ // Oriental Bank of Commerce (Merged)
128
+ "ALLA",
129
+ // Allahabad Bank (Merged)
130
+ "ANDB",
131
+ // Andhra Bank (Merged)
132
+ "SYNB",
133
+ // Syndicate Bank (Merged)
134
+ "CORP",
135
+ // Corporation Bank (Merged)
136
+ "VYSA",
137
+ // ING Vysya (Merged)
138
+ "KKBK",
139
+ // Kotak Mahindra Bank
140
+ "YESB",
141
+ // Yes Bank
142
+ "INDB",
143
+ // IndusInd Bank
144
+ "FDRL"
145
+ // Federal Bank
146
+ ]);
147
+
148
+ // src/validators/ifsc.ts
149
+ var isValidIFSC = (ifsc) => {
150
+ if (ifsc == null) return false;
151
+ if (typeof ifsc !== "string") return false;
152
+ const regex = /^[A-Z]{4}0[A-Z0-9]{6}$/;
153
+ if (!regex.test(ifsc)) return false;
154
+ const bankCode = ifsc.substring(0, 4);
155
+ return BANK_CODES.has(bankCode);
156
+ };
157
+
158
+ // src/data/pincodes.ts
159
+ var PINCODE_REGIONS = {
160
+ "11": "Delhi",
161
+ "12": "Haryana",
162
+ "13": "Haryana",
163
+ "14": "Punjab",
164
+ "15": "Punjab",
165
+ "16": "Chandigarh",
166
+ "17": "Himachal Pradesh",
167
+ "18": "Jammu & Kashmir",
168
+ "19": "Jammu & Kashmir",
169
+ "20": "Uttar Pradesh",
170
+ "21": "Uttar Pradesh",
171
+ "22": "Uttar Pradesh",
172
+ "23": "Uttar Pradesh",
173
+ "24": "Uttar Pradesh",
174
+ "25": "Uttar Pradesh",
175
+ "26": "Uttar Pradesh",
176
+ "27": "Uttar Pradesh",
177
+ "28": "Uttar Pradesh",
178
+ "30": "Rajasthan",
179
+ "31": "Rajasthan",
180
+ "32": "Rajasthan",
181
+ "33": "Rajasthan",
182
+ "34": "Rajasthan",
183
+ "36": "Gujarat",
184
+ "37": "Gujarat",
185
+ "38": "Gujarat",
186
+ "39": "Gujarat",
187
+ "40": "Maharashtra",
188
+ "41": "Maharashtra",
189
+ "42": "Maharashtra",
190
+ "43": "Maharashtra",
191
+ "44": "Maharashtra",
192
+ // ... (Can expand list)
193
+ "50": "Telangana",
194
+ "51": "Andhra Pradesh",
195
+ "52": "Andhra Pradesh",
196
+ "53": "Andhra Pradesh",
197
+ "56": "Karnataka",
198
+ "57": "Karnataka",
199
+ "58": "Karnataka",
200
+ "59": "Karnataka",
201
+ "60": "Tamil Nadu",
202
+ "61": "Tamil Nadu",
203
+ "62": "Tamil Nadu",
204
+ "63": "Tamil Nadu",
205
+ "64": "Tamil Nadu",
206
+ "67": "Kerala",
207
+ "68": "Kerala",
208
+ "69": "Kerala",
209
+ "70": "West Bengal",
210
+ "71": "West Bengal",
211
+ "72": "West Bengal",
212
+ "73": "West Bengal",
213
+ "74": "West Bengal",
214
+ "78": "Assam",
215
+ "79": "North East",
216
+ "80": "Bihar",
217
+ "81": "Bihar",
218
+ "82": "Bihar",
219
+ "83": "Jharkhand",
220
+ "84": "Bihar",
221
+ "85": "Bihar",
222
+ "90": "Army Postal Service",
223
+ "99": "Army Postal Service"
224
+ };
225
+
226
+ // src/validators/pincode.ts
227
+ var isValidPincode = (pincode) => {
228
+ if (pincode == null) return false;
229
+ if (typeof pincode !== "string") return false;
230
+ const regex = /^[1-9][0-9]{5}$/;
231
+ if (!regex.test(pincode)) return false;
232
+ const regionKey = pincode.substring(0, 2);
233
+ return Object.prototype.hasOwnProperty.call(PINCODE_REGIONS, regionKey);
234
+ };
235
+
236
+ // src/zod/index.ts
237
+ var aadhaarSchema = z.string().refine(isValidAadhaar, {
238
+ message: "Invalid Aadhaar Number"
239
+ });
240
+ var panSchema = z.string().refine(isValidPAN, {
241
+ message: "Invalid PAN Number"
242
+ });
243
+ var gstinSchema = z.string().refine(isValidGSTIN, {
244
+ message: "Invalid GSTIN Number"
245
+ });
246
+ var ifscSchema = z.string().refine(isValidIFSC, {
247
+ message: "Invalid IFSC Code"
248
+ });
249
+ var pincodeSchema = z.string().refine(isValidPincode, {
250
+ message: "Invalid Pincode"
251
+ });
252
+
253
+ export { aadhaarSchema, gstinSchema, ifscSchema, panSchema, pincodeSchema };
254
+ //# sourceMappingURL=index.mjs.map
255
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/verhoeff.ts","../../src/validators/aadhaar.ts","../../src/validators/pan.ts","../../src/utils/mod36.ts","../../src/validators/gstin.ts","../../src/data/banks.ts","../../src/validators/ifsc.ts","../../src/data/pincodes.ts","../../src/validators/pincode.ts","../../src/zod/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * The multiplication table\r\n */\r\nconst d = [\r\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\r\n [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\r\n [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\r\n [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\r\n [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\r\n [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\r\n [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\r\n [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\r\n [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\r\n];\r\n\r\n/**\r\n * The permutation table\r\n */\r\nconst p = [\r\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\r\n [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\r\n [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\r\n [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\r\n [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\r\n [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\r\n [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\r\n];\r\n\r\n/**\r\n * The inverse table\r\n */\r\nconst inv = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];\r\n\r\n/**\r\n * Validates a number string using the Verhoeff algorithm.\r\n * @param numStr The number string to validate.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const validateVerhoeff = (numStr: any): boolean => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (numStr == null || typeof numStr !== 'string') return false;\r\n if (!/^\\d+$/.test(numStr)) return false;\r\n\r\n let c = 0;\r\n const myArray = numStr.split('').map(Number).reverse();\r\n\r\n for (let i = 0; i < myArray.length; i++) {\r\n c = d[c][p[i % 8][myArray[i]]];\r\n }\r\n\r\n return c === 0;\r\n};\r\n\r\n/**\r\n * Generates the Verhoeff checksum digit for a given number string.\r\n * @param numStr The number string (without the checksum).\r\n * @returns The checksum digit.\r\n */\r\nexport const generateVerhoeff = (numStr: any): number => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (numStr == null || typeof numStr !== 'string') {\r\n throw new Error('Input must be a non-null string');\r\n }\r\n if (!/^\\d+$/.test(numStr)) {\r\n throw new Error('Input must be a numeric string');\r\n }\r\n\r\n let c = 0;\r\n const myArray = numStr.split('').map(Number).reverse();\r\n\r\n for (let i = 0; i < myArray.length; i++) {\r\n c = d[c][p[(i + 1) % 8][myArray[i]]];\r\n }\r\n\r\n return inv[c];\r\n};\r\n","import { validateVerhoeff } from '../utils/verhoeff';\r\n\r\n/**\r\n * Validates an Aadhaar number.\r\n * @param aadhaar The 12-digit Aadhaar number string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidAadhaar = (aadhaar: any): boolean => {\r\n // 0. Null/undefined check\r\n if (aadhaar == null) return false;\r\n if (typeof aadhaar !== 'string') return false;\r\n \r\n // 1. Structure: 12 digits\r\n if (!/^\\d{12}$/.test(aadhaar)) return false;\r\n\r\n // 2. Logic: Should not start with 0 or 1\r\n if (/^[01]/.test(aadhaar)) return false;\r\n\r\n // 3. Algorithm: Verhoeff Checksum\r\n return validateVerhoeff(aadhaar);\r\n};\r\n","/**\r\n * Validates a Permanent Account Number (PAN).\r\n * @param pan The 10-character PAN string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidPAN = (pan: any): boolean => {\r\n // 0. Null/undefined check\r\n if (pan == null) return false;\r\n if (typeof pan !== 'string') return false;\r\n \r\n // 1. Structure: 5 chars, 4 digits, 1 char using Regex\r\n const regex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;\r\n if (!regex.test(pan)) return false;\r\n\r\n // 2. Logic: 4th character must be one of the valid entity types\r\n const fourthChar = pan.charAt(3);\r\n const validEntityTypes = ['C', 'P', 'H', 'F', 'A', 'T', 'B', 'L', 'J', 'G'];\r\n\r\n if (!validEntityTypes.includes(fourthChar)) return false;\r\n\r\n return true;\r\n};\r\n\r\nexport interface PANInfo {\r\n valid: boolean;\r\n category?: string; // Code (P, C, etc.)\r\n categoryDesc?: string; // Description (Person, Company)\r\n}\r\n\r\nconst PAN_CATEGORY_MAP: Record<string, string> = {\r\n 'C': 'Company',\r\n 'P': 'Person',\r\n 'H': 'Hindu Undivided Family (HUF)',\r\n 'F': 'Firm',\r\n 'A': 'Association of Persons (AOP)',\r\n 'T': 'AOP (Trust)',\r\n 'B': 'Body of Individuals (BOI)',\r\n 'L': 'Local Authority',\r\n 'J': 'Artificial Juridical Person',\r\n 'G': 'Government',\r\n};\r\n\r\n/**\r\n * Extracts metadata from a PAN number.\r\n * @param pan The PAN string.\r\n * @returns Object containing validity and metadata.\r\n */\r\nexport const getPANInfo = (pan: string): PANInfo => {\r\n if (!isValidPAN(pan)) {\r\n return { valid: false };\r\n }\r\n\r\n const category = pan.charAt(3);\r\n return {\r\n valid: true,\r\n category,\r\n categoryDesc: PAN_CATEGORY_MAP[category] || 'Unknown',\r\n };\r\n};\r\n","/**\r\n * Character set for Mod-36 checksum: 0-9, A-Z\r\n * Used in GSTIN validation (GST Identification Number)\r\n */\r\nconst CHARSET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * Generates the Mod-36 check digit for a 14-character GSTIN base.\r\n * \r\n * Algorithm:\r\n * 1. For each of the 14 characters (left to right, 0-indexed):\r\n * - Convert character to numeric value (0-35)\r\n * - Multiply by weight: weight = (index % 2) + 1, alternating 1, 2, 1, 2...\r\n * - Calculate: quotient = product / 36, remainder = product % 36\r\n * - Add quotient + remainder to sum\r\n * 2. Calculate check digit index: (36 - (sum % 36)) % 36\r\n * 3. Map index back to character\r\n * \r\n * Reference: Official GSTIN format specification (Ministry of Finance, India)\r\n * \r\n * @param gstinBase The first 14 characters of GSTIN (excluding check digit)\r\n * @returns The check digit index (0-35), or -1 if input is invalid\r\n */\r\nexport const generateGSTCheckDigit = (gstinBase: any): number => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (gstinBase == null || typeof gstinBase !== 'string') return -1;\r\n if (gstinBase.length !== 14) return -1;\r\n \r\n const input = gstinBase.toUpperCase();\r\n let sum = 0;\r\n\r\n for (let i = 0; i < 14; i++) {\r\n const charValue = CHARSET.indexOf(input[i]);\r\n if (charValue < 0) return -1; // Invalid character\r\n\r\n // Weight alternates: 1, 2, 1, 2, ... (for positions 0, 1, 2, 3, ...)\r\n const weight = (i % 2) + 1;\r\n const product = charValue * weight;\r\n \r\n // Add both quotient and remainder\r\n sum += Math.floor(product / 36) + (product % 36);\r\n }\r\n\r\n // Check digit index = (36 - (sum mod 36)) mod 36\r\n const checkDigitIndex = (36 - (sum % 36)) % 36;\r\n return checkDigitIndex;\r\n};\r\n\r\n/**\r\n * Validates a GSTIN using Mod-36 Checksum Algorithm.\r\n * \r\n * @param gstin The 15-character GSTIN string to validate\r\n * @returns True if the check digit is valid, false otherwise\r\n */\r\nexport const validateGSTCheckDigit = (gstin: any): boolean => {\r\n // Defensive: Handle null/undefined/non-string\r\n if (gstin == null || typeof gstin !== 'string') return false;\r\n if (gstin.length !== 15) return false;\r\n \r\n const input = gstin.toUpperCase();\r\n const gstinBase = input.substring(0, 14);\r\n const providedCheckDigit = input.charAt(14);\r\n \r\n // Generate expected check digit\r\n const expectedCheckDigitIndex = generateGSTCheckDigit(gstinBase);\r\n if (expectedCheckDigitIndex < 0) return false;\r\n \r\n const expectedCheckDigit = CHARSET[expectedCheckDigitIndex];\r\n return providedCheckDigit === expectedCheckDigit;\r\n};\r\n","import { validateGSTCheckDigit } from '../utils/mod36';\r\nimport { GST_STATE_CODES } from '../data/gst_states';\r\n\r\n/**\r\n * Validates a GSTIN.\r\n * @param gstin The 15-character GSTIN string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidGSTIN = (gstin: any): boolean => {\r\n // 0. Null/undefined check\r\n if (gstin == null) return false;\r\n if (typeof gstin !== 'string') return false;\r\n \r\n // 1. Basic Regex Structure\r\n const regex = /^\\d{2}[A-Z]{5}\\d{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/;\r\n\r\n if (!regex.test(gstin)) return false;\r\n\r\n // 2. Validate Mod-36 Check Digit\r\n return validateGSTCheckDigit(gstin);\r\n};\r\n\r\nexport interface GSTINInfo {\r\n valid: boolean;\r\n state?: string;\r\n stateCode?: string;\r\n}\r\n\r\n/**\r\n * Extracts metadata from a GSTIN.\r\n * @param gstin The GSTIN string.\r\n * @returns Object containing validity and metadata (State Name).\r\n */\r\nexport const getGSTINInfo = (gstin: string): GSTINInfo => {\r\n if (!isValidGSTIN(gstin)) {\r\n return { valid: false };\r\n }\r\n\r\n const stateCode = gstin.substring(0, 2);\r\n\r\n return {\r\n valid: true,\r\n stateCode,\r\n state: GST_STATE_CODES[stateCode] || 'Unknown State',\r\n };\r\n};\r\n","/**\r\n * A compressed set of popular/valid bank codes (First 4 chars of IFSC).\r\n * This is not exhaustive but covers major banks to demonstrate the pattern.\r\n * In a real scenario, this would be auto-generated from RBI master list.\r\n */\r\nexport const BANK_CODES = new Set([\r\n 'SBIN', // State Bank of India\r\n 'HDFC', // HDFC Bank\r\n 'ICIC', // ICICI Bank\r\n 'UTIB', // Axis Bank\r\n 'PUNB', // Punjab National Bank\r\n 'BKID', // Bank of India\r\n 'BARB', // Bank of Baroda\r\n 'CNRB', // Canara Bank\r\n 'UBIN', // Union Bank of India\r\n 'IOBA', // Indian Overseas Bank\r\n 'IDIB', // Indian Bank\r\n 'CBIN', // Central Bank of India\r\n 'MAHB', // Bank of Maharashtra\r\n 'ORBC', // Oriental Bank of Commerce (Merged)\r\n 'ALLA', // Allahabad Bank (Merged)\r\n 'ANDB', // Andhra Bank (Merged)\r\n 'SYNB', // Syndicate Bank (Merged)\r\n 'CORP', // Corporation Bank (Merged)\r\n 'VYSA', // ING Vysya (Merged)\r\n 'KKBK', // Kotak Mahindra Bank\r\n 'YESB', // Yes Bank\r\n 'INDB', // IndusInd Bank\r\n 'FDRL', // Federal Bank\r\n]);\r\n","import { BANK_CODES } from '../data/banks';\r\n\r\n/**\r\n * Validates an IFSC Code.\r\n * @param ifsc The 11-character IFSC string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidIFSC = (ifsc: any): boolean => {\r\n // 0. Null/undefined check\r\n if (ifsc == null) return false;\r\n if (typeof ifsc !== 'string') return false;\r\n \r\n // 1. Structure: 4 chars, 0, 6 chars (alphanumeric)\r\n const regex = /^[A-Z]{4}0[A-Z0-9]{6}$/;\r\n if (!regex.test(ifsc)) return false;\r\n\r\n // 2. Knowledge: Check if the Bank Code (first 4 chars) is known\r\n const bankCode = ifsc.substring(0, 4);\r\n\r\n // In strict mode, we only allow known banks.\r\n // In permissive mode (if we hadn't hardcoded), we'd skip.\r\n // For this library, we want high performance validation, so checking the Set is fast.\r\n return BANK_CODES.has(bankCode);\r\n};\r\n","/**\r\n * Mapping of first 2 digits of Pincode to Region/Circle.\r\n */\r\nexport const PINCODE_REGIONS: Record<string, string> = {\r\n '11': 'Delhi',\r\n '12': 'Haryana',\r\n '13': 'Haryana',\r\n '14': 'Punjab',\r\n '15': 'Punjab',\r\n '16': 'Chandigarh',\r\n '17': 'Himachal Pradesh',\r\n '18': 'Jammu & Kashmir',\r\n '19': 'Jammu & Kashmir',\r\n '20': 'Uttar Pradesh',\r\n '21': 'Uttar Pradesh',\r\n '22': 'Uttar Pradesh',\r\n '23': 'Uttar Pradesh',\r\n '24': 'Uttar Pradesh',\r\n '25': 'Uttar Pradesh',\r\n '26': 'Uttar Pradesh',\r\n '27': 'Uttar Pradesh',\r\n '28': 'Uttar Pradesh',\r\n '30': 'Rajasthan',\r\n '31': 'Rajasthan',\r\n '32': 'Rajasthan',\r\n '33': 'Rajasthan',\r\n '34': 'Rajasthan',\r\n '36': 'Gujarat',\r\n '37': 'Gujarat',\r\n '38': 'Gujarat',\r\n '39': 'Gujarat',\r\n '40': 'Maharashtra',\r\n '41': 'Maharashtra',\r\n '42': 'Maharashtra',\r\n '43': 'Maharashtra',\r\n '44': 'Maharashtra',\r\n // ... (Can expand list)\r\n '50': 'Telangana',\r\n '51': 'Andhra Pradesh',\r\n '52': 'Andhra Pradesh',\r\n '53': 'Andhra Pradesh',\r\n '56': 'Karnataka',\r\n '57': 'Karnataka',\r\n '58': 'Karnataka',\r\n '59': 'Karnataka',\r\n '60': 'Tamil Nadu',\r\n '61': 'Tamil Nadu',\r\n '62': 'Tamil Nadu',\r\n '63': 'Tamil Nadu',\r\n '64': 'Tamil Nadu',\r\n '67': 'Kerala',\r\n '68': 'Kerala',\r\n '69': 'Kerala',\r\n '70': 'West Bengal',\r\n '71': 'West Bengal',\r\n '72': 'West Bengal',\r\n '73': 'West Bengal',\r\n '74': 'West Bengal',\r\n '78': 'Assam',\r\n '79': 'North East',\r\n '80': 'Bihar',\r\n '81': 'Bihar',\r\n '82': 'Bihar',\r\n '83': 'Jharkhand',\r\n '84': 'Bihar',\r\n '85': 'Bihar',\r\n '90': 'Army Postal Service',\r\n '99': 'Army Postal Service',\r\n};\r\n","import { PINCODE_REGIONS } from '../data/pincodes';\r\n\r\n/**\r\n * Validates an Indian Pincode.\r\n * @param pincode The 6-digit Pincode string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidPincode = (pincode: any): boolean => {\r\n // 0. Null/undefined check\r\n if (pincode == null) return false;\r\n if (typeof pincode !== 'string') return false;\r\n \r\n // 1. Structure: 6 digits, first digit 1-9\r\n const regex = /^[1-9][0-9]{5}$/;\r\n if (!regex.test(pincode)) return false;\r\n\r\n // 2. Knowledge: Check if the Region (first 2 digits) exists in our map\r\n const regionKey = pincode.substring(0, 2);\r\n return Object.prototype.hasOwnProperty.call(PINCODE_REGIONS, regionKey);\r\n};\r\n\r\nexport interface PincodeInfo {\r\n valid: boolean;\r\n region?: string;\r\n}\r\n\r\n/**\r\n * Extracts metadata from a Pincode.\r\n * @param pincode The Pincode string.\r\n * @returns Object containing validity and region info.\r\n */\r\nexport const getPincodeInfo = (pincode: string): PincodeInfo => {\r\n if (!isValidPincode(pincode)) {\r\n return { valid: false };\r\n }\r\n\r\n const regionKey = pincode.substring(0, 2);\r\n return {\r\n valid: true,\r\n region: PINCODE_REGIONS[regionKey] || 'Unknown Region',\r\n };\r\n};\r\n","import { z } from 'zod';\r\nimport {\r\n isValidAadhaar,\r\n isValidPAN,\r\n isValidGSTIN,\r\n isValidIFSC,\r\n isValidPincode\r\n} from '../validators';\r\n\r\nexport const aadhaarSchema = z.string().refine(isValidAadhaar, {\r\n message: \"Invalid Aadhaar Number\",\r\n});\r\n\r\nexport const panSchema = z.string().refine(isValidPAN, {\r\n message: \"Invalid PAN Number\",\r\n});\r\n\r\nexport const gstinSchema = z.string().refine(isValidGSTIN, {\r\n message: \"Invalid GSTIN Number\",\r\n});\r\n\r\nexport const ifscSchema = z.string().refine(isValidIFSC, {\r\n message: \"Invalid IFSC Code\",\r\n});\r\n\r\nexport const pincodeSchema = z.string().refine(isValidPincode, {\r\n message: \"Invalid Pincode\",\r\n});\r\n"]}