India-first Flutter form validation package with 30+ validators.
Validate Aadhaar, PAN, GST, IFSC, UPI, Driving License, Passport, Voter ID, CIN, TAN, FSSAI, ABHA, EPF, Card (Luhn), RERA, Udyam and more โ with English, Hindi & Gujarati error messages.

| Validator |
Description |
aadhaar |
12-digit Aadhaar (starts 2โ9) |
pan |
PAN card (ABCDE1234F format) |
passport |
Indian passport number |
voterId |
Voter ID / EPIC number |
drivingLicense |
Indian driving license number |
| Validator |
Description |
gst |
15-char GST number |
tan |
TAN number (PDES03028F format) |
cin |
Company Identification Number |
fssai |
FSSAI license number (14 digits) |
udyam |
Udyam / MSME registration number |
rera |
RERA registration number |
| Validator |
Description |
ifsc |
Bank IFSC code |
upi |
UPI ID (name@handle) |
bankAccount |
Bank account number (9โ18 digits) |
cardNumber |
Credit/Debit card number (Luhn algorithm) |
micr |
MICR code (9 digits) |
epf |
EPF / PF account number |
amount |
Indian currency amount with optional min/max (โน) |
| Validator |
Description |
phone |
10-digit mobile (+91 supported) |
email |
Email address |
landline |
Indian landline with STD code |
| Validator |
Description |
abha |
ABHA / Ayushman Bharat Health Account number |
| Validator |
Description |
pincode |
6-digit Indian pincode |
vehicle |
Indian vehicle number (GJ01AB1234) |
| Validator |
Description |
name |
Name (supports Devanagari & Gujarati script) |
password |
Strong password (8+ chars, upper, lower, digit, symbol) |
username |
Username (3โ20 chars, letters/digits/_/-) |
dob |
Date of birth with optional min/max age |
| Validator |
Description |
url |
Website URL (http/https) |
otp |
OTP โ 4 or 6 digit |
Multi-language error messages: English ๐ฌ๐ง ยท Hindi ๐ฎ๐ณ ยท Gujarati ๐
dependencies:
bharatvalidator: ^1.0.0
flutter pub get
import 'package:bharatvalidator/bharatvalidator.dart';
final v = BharatValidator(); // English (default)
TextFormField(
validator: v.aadhaar, // Pass directly!
)
// Hindi
final v = BharatValidator(locale: BharatLocale.hindi);
// Gujarati
final v = BharatValidator(locale: BharatLocale.gujarati);
// DOB with minimum age check
TextFormField(
validator: (val) => v.dob(val, minAge: 18),
)
// Amount with min/max range
TextFormField(
validator: (val) => v.amount(val, min: 1, max: 100000),
)
// OTP length
TextFormField(
validator: (val) => v.otp(val, length: 6),
)
final v = BharatValidator(locale: BharatLocale.hindi);
Form(
key: _formKey,
child: Column(
children: [
// Personal
TextFormField(validator: v.name, decoration: InputDecoration(labelText: 'Name')),
TextFormField(validator: v.username, decoration: InputDecoration(labelText: 'Username')),
TextFormField(validator: v.phone, decoration: InputDecoration(labelText: 'Mobile')),
TextFormField(validator: v.email, decoration: InputDecoration(labelText: 'Email')),
TextFormField(validator: v.password, decoration: InputDecoration(labelText: 'Password')),
TextFormField(validator: (v) => v.dob(v, minAge: 18), decoration: InputDecoration(labelText: 'DOB')),
// Government IDs
TextFormField(validator: v.aadhaar, decoration: InputDecoration(labelText: 'Aadhaar')),
TextFormField(validator: v.pan, decoration: InputDecoration(labelText: 'PAN')),
TextFormField(validator: v.voterId, decoration: InputDecoration(labelText: 'Voter ID')),
TextFormField(validator: v.passport, decoration: InputDecoration(labelText: 'Passport')),
TextFormField(validator: v.drivingLicense, decoration: InputDecoration(labelText: 'Driving License')),
// Tax & Business
TextFormField(validator: v.gst, decoration: InputDecoration(labelText: 'GST')),
TextFormField(validator: v.tan, decoration: InputDecoration(labelText: 'TAN')),
TextFormField(validator: v.cin, decoration: InputDecoration(labelText: 'CIN')),
TextFormField(validator: v.fssai, decoration: InputDecoration(labelText: 'FSSAI')),
TextFormField(validator: v.udyam, decoration: InputDecoration(labelText: 'Udyam')),
// Banking
TextFormField(validator: v.ifsc, decoration: InputDecoration(labelText: 'IFSC')),
TextFormField(validator: v.upi, decoration: InputDecoration(labelText: 'UPI ID')),
TextFormField(validator: v.bankAccount, decoration: InputDecoration(labelText: 'Account No.')),
TextFormField(validator: v.cardNumber, decoration: InputDecoration(labelText: 'Card Number')),
ElevatedButton(
onPressed: () => _formKey.currentState!.validate(),
child: Text('Submit'),
),
],
),
)
BharatLocale.english // "Enter a valid 12-digit Aadhaar number."
BharatLocale.hindi // "เคฎเคพเคจเฅเคฏ 12 เค
เคเคเฅเค เคเคพ เคเคงเคพเคฐ เคจเคเคฌเคฐ เคฆเคฐเฅเค เคเคฐเฅเคเฅค"
BharatLocale.gujarati // "เชฎเชพเชจเซเชฏ 12 เช
เชเชเชจเซ เชเชงเชพเชฐ เชจเชเชฌเชฐ เชฆเชพเชเชฒ เชเชฐเซ."
bharatvalidator/
โโโ lib/
โ โโโ bharatvalidator.dart # Main export
โ โโโ src/
โ โโโ bharat_validator.dart # Main BharatValidator class
โ โโโ locale/
โ โ โโโ bharat_locale.dart # Multi-language messages
โ โโโ validators/
โ โโโ aadhaar_validator.dart
โ โโโ pan_validator.dart
โ โโโ gst_validator.dart
โ โโโ tan_validator.dart
โ โโโ cin_validator.dart
โ โโโ ifsc_validator.dart
โ โโโ upi_validator.dart
โ โโโ pincode_validator.dart
โ โโโ phone_validator.dart
โ โโโ landline_validator.dart
โ โโโ email_validator.dart
โ โโโ vehicle_validator.dart
โ โโโ passport_validator.dart
โ โโโ voter_id_validator.dart
โ โโโ driving_license_validator.dart
โ โโโ bank_account_validator.dart
โ โโโ card_number_validator.dart
โ โโโ micr_validator.dart
โ โโโ epf_validator.dart
โ โโโ fssai_validator.dart
โ โโโ abha_validator.dart
โ โโโ rera_validator.dart
โ โโโ udyam_validator.dart
โ โโโ name_validator.dart
โ โโโ password_validator.dart
โ โโโ username_validator.dart
โ โโโ dob_validator.dart
โ โโโ amount_validator.dart
โ โโโ url_validator.dart
โ โโโ otp_validator.dart
โโโ example/ # Full demo app
โโโ test/ # Unit tests
flutter test
MIT License ยฉ 2026 โ Made with โค๏ธ for Indian Flutter developers.