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

A Flutter plugin for validating and formatting Thai ID card numbers as users type.

thai_id_card_numbers #

pub package

A Flutter/Dart package for validating and formatting Thai ID card numbers, including a TextInputFormatter for live masking as users type.

Install #

Add the dependency in pubspec.yaml and fetch packages:

dependencies:
  thai_id_card_numbers: ^1.4.0
flutter pub get

Quick start #

Validate, format, and generate IDs in Dart code:

import 'package:thai_id_card_numbers/thai_id_card_numbers.dart';

final id = ThaiIdCardNumbers();

id.validate('1234567890121'); // true if checksum matches
id.format('1234567890121');   // => "1-2345-67890-12-1"
final generated = id.generate(); // valid 13-digit ID

// Helpers
id.validateFormatted('1-2345-67890-12-1'); // true (accepts delimiters)
id.normalize('1-2345-67890-12-1'); // => "1234567890121"
id.checksum('123456789012'); // => 1

Use the input formatter in a Flutter TextFormField:

import 'package:thai_id_card_numbers/thai_id_card_numbers_formatter.dart';

const pattern = 'x-xxxx-xxxxx-xx-x';
const delimiter = '-';

TextFormField(
  keyboardType: TextInputType.number,
  inputFormatters: [
    FilteringTextInputFormatter.digitsOnly,
    ThaiIdCardNumbersFormatter(pattern: pattern, delimiter: delimiter),
  ],
  validator: (value) {
    final raw = (value ?? '').replaceAll(RegExp(RegExp.escape(delimiter)), '');
    return ThaiIdCardNumbers().validate(raw) ? null : 'Invalid Thai ID card number';
  },
  decoration: const InputDecoration(hintText: '1-2345-67890-12-1'),
)

Customize the pattern/delimiter as needed (e.g., '.'):

ThaiIdCardNumbers().format('1234567890121', pattern: 'x.xxxx.xxxxx.xx.x', delimiter: '.');
// => "1.2345.67890.12.1"

API #

  • validate(String): Checks 13 digits (no delimiters) against checksum.
  • validateFormatted(String): Accepts formatted input; auto-normalizes.
  • format(String, {pattern, delimiter}): Applies mask to digits.
  • formatStrict(String, {pattern, delimiter}): Like format but throws if length mismatches pattern slots.
  • generate({int? firstDigit, bool formatted = false, String pattern, String delimiter}): Creates a valid ID; optionally formatted and constrained by first digit.
  • normalize(String): Removes all non-digits.
  • checksum(String first12): Returns expected check digit for 12-digit prefix.

Checksum rule: sum of digit[i] × (13 − i) for i=0..11, then (11 − (sum % 11)) % 10 equals the 13th digit.

Example app #

A runnable demo is included under example/.

  • Run on web: cd example && flutter run -d chrome
  • Features: live validation indicator, generate button, clipboard copy of raw digits.

Screenshots #

Add media under docs/ and reference them here:

Demo

If images don’t render on pub.dev, open the GitHub README directly.

Documentation #

Testing #

Run the package tests:

flutter test

Inspiration #

This package is inspired by thai-id-validator.

3
likes
150
points
77
downloads

Publisher

verified publisherdhanabhon.com

Weekly Downloads

A Flutter plugin for validating and formatting Thai ID card numbers as users type.

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