generate method

String generate({
  1. int? firstDigit,
  2. bool formatted = false,
  3. String pattern = 'x-xxxx-xxxxx-xx-x',
  4. String delimiter = '-',
})

Generate a valid Thai ID.

  • firstDigit: optionally constrain the first digit (0-9).
  • formatted: if true, returns using pattern/delimiter.

Implementation

String generate(
    {int? firstDigit,
    bool formatted = false,
    String pattern = 'x-xxxx-xxxxx-xx-x',
    String delimiter = '-'}) {
  final rand = Random();
  final digits = List<int>.filled(13, 0);
  for (var i = 0; i < 12; i++) {
    digits[i] = rand.nextInt(10);
  }
  if (firstDigit != null) {
    if (firstDigit < 0 || firstDigit > 9) {
      throw ArgumentError('firstDigit must be 0-9');
    }
    digits[0] = firstDigit;
  }
  // compute checksum
  final first12 = digits.take(12).join();
  digits[12] = checksum(first12);
  final raw = digits.join();
  if (!formatted) return raw;
  return format(raw, pattern: pattern, delimiter: delimiter);
}