File: //home/arjun/projects/env/lib/python3.10/site-packages/faker/providers/ssn/th_TH/__init__.py
from random import randint
from .. import Provider as BaseProvider
class Provider(BaseProvider):
# Source:
# https://en.wikipedia.org/wiki/Thai_identity_card#Identification_number
# Thai national identity number has 13 digits, in this format:
# 1-2345-67890-12-3
# Digit 1: Person category
# Digits 2-5: Province and amphoe code of registrar's office (ISO 3166-2)
# Digits 6-12: Birth certificate number
# Digit 13: Checksum
def ssn(self) -> str:
"""
Thai national ID
"""
category = randint(1, 8)
province = randint(10, 96)
amphoe = 0
if province == 10: # Bangkok
amphoe = randint(1, 50) # Bangkok has district number up to 50
else:
amphoe = randint(1, 20) # Provinces outside Bangkok has 20 or less
birth_book = randint(1, 99999)
birth_sheet = randint(1, 99)
digits = f"{category:01d}{province:02d}{amphoe:02d}{birth_book:05d}{birth_sheet:02d}"
checksum = (
(int(digits[0]) * 13)
+ (int(digits[1]) * 12)
+ (int(digits[2]) * 11)
+ (int(digits[3]) * 10)
+ (int(digits[4]) * 9)
+ (int(digits[5]) * 8)
+ (int(digits[6]) * 7)
+ (int(digits[7]) * 6)
+ (int(digits[8]) * 5)
+ (int(digits[9]) * 4)
+ (int(digits[10]) * 3)
+ (int(digits[11]) * 2)
)
checksum = checksum % 11
checksum = 11 - checksum
if checksum > 9:
checksum = checksum - 10
nat_id = f"{category:01d}-{province:02d}{amphoe:02d}-{birth_book:05d}-{birth_sheet:02d}-{checksum:01d}"
return nat_id
def vat_id(self) -> str:
"""
Personal VAT ID is the same as national ID
(Corporate VAT ID is different)
"""
return self.ssn()