thai_id_card_numbers 1.5.1 copy "thai_id_card_numbers: ^1.5.1" to clipboard
thai_id_card_numbers: ^1.5.1 copied to clipboard

A comprehensive Flutter package for validating, formatting, and generating Thai ID card numbers. Includes smart input formatter, data extraction, and handy extensions.

Thai ID Card Numbers #

pub package License: MIT CI/CD

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.

Thai ID Card Numbers Demo


Features #

  • Validation: Verify 13-digit Thai ID checksums.
  • Formatting: Auto-format strings (e.g., 1-2345-67890-12-1).
  • Smart Input Formatter: A TextInputFormatter for 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 FormFieldValidator for TextFormField.

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); 

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 #

  1. Clone the repo:
    git clone https://github.com/Dhanabhon/thai_id_card_numbers.git
    
  2. Install dependencies:
    flutter pub get
    
  3. 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.

Inspiration #

Inspired by thai-id-validator.

3
likes
160
points
23
downloads

Publisher

verified publisherdhanabhon.com

Weekly Downloads

A comprehensive Flutter package for validating, formatting, and generating Thai ID card numbers. Includes smart input formatter, data extraction, and handy extensions.

Homepage
Repository (GitHub)
View/report issues

Topics

#thai-id-card-numbers

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_web_plugins

More

Packages that depend on thai_id_card_numbers