PakValidate 1.0.2
See the version list below for details.
dotnet add package PakValidate --version 1.0.2
NuGet\Install-Package PakValidate -Version 1.0.2
<PackageReference Include="PakValidate" Version="1.0.2" />
<PackageVersion Include="PakValidate" Version="1.0.2" />
<PackageReference Include="PakValidate" />
paket add PakValidate --version 1.0.2
#r "nuget: PakValidate, 1.0.2"
#:package PakValidate@1.0.2
#addin nuget:?package=PakValidate&version=1.0.2
#tool nuget:?package=PakValidate&version=1.0.2
🇵🇰 PakValidate
A comprehensive .NET validation library for Pakistani data formats. Validate CNIC, mobile numbers, NTN, IBAN, postal codes, landline numbers, vehicle plates, and STRN — with rich metadata extraction.
Features
| Validator | Validates | Extracts |
|---|---|---|
| CNIC | 13-digit national identity card | Gender, Province, Locality Code |
| Mobile | Pakistani mobile numbers (all formats) | Carrier (Jazz/Telenor/Zong/Ufone), E.164 format |
| NTN | National Tax Number (FBR) | Standard vs CNIC-based type |
| IBAN | Pakistani bank accounts (MOD-97) | Bank name, Account number |
| Postal Code | 5-digit postal codes | Region/City |
| Landline | City landline numbers | Area code, City |
| Vehicle Plate | Registration plates | Registration city |
| STRN | Sales Tax Registration Number | RTO Jurisdiction |
Installation
# Core library
dotnet add package PakValidate
# FluentValidation extensions (optional)
dotnet add package PakValidate.FluentValidation
Quick Start
using PakValidate;
// Simple validation
bool isValid = Pak.Cnic.IsValid("35202-1234567-1"); // true
// Rich validation with metadata
var result = Pak.Cnic.Validate("35202-1234567-1");
if (result.IsValid)
{
Console.WriteLine(result.Metadata["Gender"]); // Male
Console.WriteLine(result.Metadata["Province"]); // Punjab
Console.WriteLine(result.Metadata["Formatted"]); // 35202-1234567-1
}
// Mobile number with carrier detection
var mobile = Pak.Mobile.Validate("03001234567");
Console.WriteLine(mobile.Metadata["Carrier"]); // Jazz
Console.WriteLine(mobile.Metadata["InternationalFormat"]); // +923001234567
// IBAN with bank identification
var iban = Pak.Iban.Validate("PK36SCBL0000001123456702");
Console.WriteLine(iban.Metadata["BankName"]); // Standard Chartered Pakistan
// Implicit bool conversion
if (Pak.Mobile.Validate(phoneNumber))
{
// Valid!
}
Validators
CNIC
// Accepts: 35202-1234567-1, 3520212345671
var result = Pak.Cnic.Validate("35202-1234567-1");
// Metadata: Gender, Province, LocalityCode, Formatted
string formatted = Pak.Cnic.Format("3520212345671"); // 35202-1234567-1
Province codes: 1=KP, 2=FATA/Merged, 3=Punjab, 4=Sindh, 5=Balochistan, 6=Islamabad, 7=GB, 8=AJK
Mobile Number
// Accepts: 03001234567, 0300-1234567, +923001234567, 923001234567
var result = Pak.Mobile.Validate("03001234567");
// Metadata: Carrier, LocalFormat, InternationalFormat, E164, Prefix
string? carrier = Pak.Mobile.GetCarrier("03451234567"); // Telenor
string? intl = Pak.Mobile.ToInternational("03001234567"); // +923001234567
Supported carriers: Jazz, Telenor, Zong, Ufone, SCO
NTN (National Tax Number)
// Standard: 1234567-8 | CNIC-based: 3520212345671
var result = Pak.Ntn.Validate("1234567-8");
// Metadata: Type (Standard/CNIC-based), Formatted
IBAN
// Format: PK## XXXX ################
var result = Pak.Iban.Validate("PK36SCBL0000001123456702");
// Metadata: BankCode, BankName, AccountNumber, CheckDigits, Formatted
string? bank = Pak.Iban.GetBankName("PK36SCBL0000001123456702"); // Standard Chartered Pakistan
Supports 25+ Pakistani banks including HBL, UBL, MCB, Meezan, Allied, Bank Alfalah, and more.
Postal Code
var result = Pak.PostalCode.Validate("44000");
// Metadata: Region (Islamabad), RegionPrefix
string? region = Pak.PostalCode.GetRegion("75500"); // Karachi
Landline
// Accepts: 021-12345678, 051-1234567, +92-51-1234567
var result = Pak.Landline.Validate("051-1234567");
// Metadata: AreaCode, City, LocalFormat, InternationalFormat
Vehicle Registration Plate
// Accepts: LEA-1234, RI-5678, ISB-123, G-1234
var result = Pak.VehiclePlate.Validate("LEA-1234");
// Metadata: Prefix, Number, RegistrationCity, Formatted
STRN (Sales Tax Registration Number)
var result = Pak.Strn.Validate("1312345678901");
// Metadata: Jurisdiction (RTO Islamabad), RegionCode, Formatted
FluentValidation Extensions
dotnet add package PakValidate.FluentValidation
using PakValidate.FluentValidation;
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(x => x.Cnic)
.NotEmpty()
.IsValidCnic();
RuleFor(x => x.Phone)
.IsValidPakistaniMobile();
RuleFor(x => x.Iban)
.IsValidPakistaniIban();
RuleFor(x => x.Ntn)
.IsValidNtn();
RuleFor(x => x.PostalCode)
.IsValidPakistaniPostalCode();
RuleFor(x => x.VehiclePlate)
.IsValidPakistaniVehiclePlate();
RuleFor(x => x.Strn)
.IsValidStrn();
// Validates both mobile and landline
RuleFor(x => x.AnyPhone)
.IsValidPakistaniPhone();
}
}
ValidationResult
Every Validate() call returns a ValidationResult:
public class ValidationResult
{
bool IsValid { get; } // Pass/fail
string? ErrorMessage { get; } // Error if invalid
string? Sanitized { get; } // Cleaned input (digits only)
IReadOnlyDictionary<string, string> Metadata { get; } // Extracted data
// Implicit bool conversion
public static implicit operator bool(ValidationResult result);
}
Supported Frameworks
- .NET 6.0
- .NET 7.0
- .NET 8.0
- .NET 9.0
- .NET 10.0
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
-
net6.0
- No dependencies.
-
net7.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on PakValidate:
| Package | Downloads |
|---|---|
|
PakValidate.FluentValidation
FluentValidation extensions for PakValidate — validate Pakistani data formats (CNIC, mobile, NTN, IBAN, etc.) using FluentValidation rules. |
|
|
PakValidate.DataAnnotations
Data Annotations validation attributes for PakValidate — validate Pakistani data formats (CNIC, mobile, NTN, IBAN, etc.) using System.ComponentModel.DataAnnotations attributes. |
GitHub repositories
This package is not used by any popular GitHub repositories.