From b89a0b0229f2a98a3f3d9e337edf5794e3069eef Mon Sep 17 00:00:00 2001 From: Alexander Kireev Date: Fri, 19 Jun 2026 02:13:34 +0700 Subject: [PATCH] fix(isIdentityCard): accept province 8 (AJK) and gender digit 0 in PK CNIC --- src/lib/isIdentityCard.js | 8 ++++++-- test/validators.test.js | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/isIdentityCard.js b/src/lib/isIdentityCard.js index 7e20064e1..a0c3defbe 100644 --- a/src/lib/isIdentityCard.js +++ b/src/lib/isIdentityCard.js @@ -415,8 +415,12 @@ const validators = { }, 0); }, PK: (str) => { - // Pakistani National Identity Number CNIC is 13 digits - const CNIC = /^[1-7][0-9]{4}-[0-9]{7}-[1-9]$/; + // Pakistani National Identity Number CNIC is 13 digits in the form + // XXXXX-XXXXXXX-X. The first digit is the province/administrative-unit + // code 1-8 (8 = Azad Kashmir) and the last digit encodes gender, using + // odd digits for men and even digits (including 0) for women. + // https://en.wikipedia.org/wiki/CNIC_(Pakistan) + const CNIC = /^[1-8][0-9]{4}-[0-9]{7}-[0-9]$/; // sanitize user input const sanitized = str.trim(); diff --git a/test/validators.test.js b/test/validators.test.js index 7d9d12690..07f319331 100644 --- a/test/validators.test.js +++ b/test/validators.test.js @@ -6685,6 +6685,10 @@ describe('Validators', () => { '63456-8765432-8', '55672-1234567-5', '21234-9876543-6', + '82345-2345678-7', + '81234-1234567-3', + '45504-4185771-0', + '34543-2323471-0', ], invalid: [ '08000-1234567-5',