Thai ID Card Numbers
A powerful Flutter/Dart package for validating, formatting, and generating Thai ID card numbers.
Now features Smart Input Formatter for better UX and Data Extraction tools.
Features
- Validation: Verify 13-digit Thai ID checksums.
- Formatting: Auto-format strings (e.g.,
1-2345-67890-12-1). - Smart Input Formatter: A
TextInputFormatterfor Flutter that handles cursor positioning intelligently as you type or edit. - Extensions: Clean and readable Dart extensions (e.g.,
'...'.isValidThaiId). - Data Extraction: Parse metadata like Person Type, Office Code, and Group from an ID.
- Form Validator: Ready-to-use
FormFieldValidatorforTextFormField.
Installation
Add the dependency in pubspec.yaml:
dependencies:
thai_id_card_numbers: ^1.5.0
Run flutter pub get to install.
Usage Guide
1. Basic Validation & Formatting (Dart/Console)
import 'package:thai_id_card_numbers/thai_id_card_numbers.dart';
final id = ThaiIdCardNumbers();
// Validate
bool isValid = id.validate('1234567890121'); // true if checksum matches
// Format
String formatted = id.format('1234567890121'); // "1-2345-67890-12-1"
// Generate random valid ID
String generated = id.generate(formatted: true);
2. String Extensions (Recommended)
Write cleaner code using Dart extensions:
import 'package:thai_id_card_numbers/thai_id_card_numbers.dart';
String raw = '1234567890121';
if (raw.isValidThaiId) {
print('Passes Checksum!');
}
print(raw.formatAsThaiId()); // "1-2345-67890-12-1"
3. Flutter Form Integration
Smart Input Formatter
Use ThaiIdCardNumbersFormatter in your TextField. It automatically formats input and keeps the cursor in the right place even during editing.
import 'package:thai_id_card_numbers/thai_id_card_numbers_formatter.dart';
TextFormField(
keyboardType: TextInputType.number,
inputFormatters: [
ThaiIdCardNumbersFormatter(delimiter: '-'), // Pattern defaults to x-xxxx-xxxxx-xx-x
],
)
Form Validator
Validate the field easily:
TextFormField(
validator: ThaiIdValidator.validate(
errorText: 'Please enter a valid ID',
allowEmpty: false,
),
)
4. Data Extraction (Metadata)
Extract hidden information from a valid Thai ID:
final info = '1-2345-67890-12-1'.thaiIdInfo;
if (info != null) {
print('Type: ${info.typeDescription}'); // e.g., "Thai national: birth registered within..."
print('Province/District Code: ${info.officeCode}');
print('Group/Volume: ${info.group}');
}
Contributing
We welcome contributions! Whether it's reporting a bug, suggesting an enhancement, or submitting a Pull Request.
Development Setup
- Clone the repo:
git clone https://github.com/Dhanabhon/thai_id_card_numbers.git - Install dependencies:
flutter pub get - Run Tests:
We have a comprehensive test suite in the
test/directory, broken down by feature.flutter test
Project Structure
lib/thai_id_card_numbers.dart: Core logic validation/formatting.lib/thai_id_card_numbers_formatter.dart: Flutter input formatter logic.lib/src/: Internal implementation and helper classes (Extensions,ThaiIdInfo).test/: Unit tests corresponding to each feature.
Links
- Pub.dev: pub.dev/packages/thai_id_card_numbers
- Documentation: dartdocs
Inspiration
Inspired by thai-id-validator.