26 lines
663 B
Python
26 lines
663 B
Python
import re
|
|
|
|
PAN_PATTERN = re.compile(r"^[A-Z]{5}[0-9]{4}[A-Z]$")
|
|
GST_PATTERN = re.compile(r"^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$")
|
|
|
|
|
|
def normalize_pan(value: str) -> str:
|
|
return value.strip().upper()
|
|
|
|
|
|
def normalize_gst(value: str) -> str:
|
|
return value.strip().upper()
|
|
|
|
|
|
def validate_pan(value: str) -> str:
|
|
pan = normalize_pan(value)
|
|
if not PAN_PATTERN.match(pan):
|
|
raise ValueError("PAN must match format ABCDE1234F")
|
|
return pan
|
|
|
|
|
|
def validate_gst(value: str) -> str:
|
|
gst = normalize_gst(value)
|
|
if not GST_PATTERN.match(gst):
|
|
raise ValueError("GST must be a valid 15-character Indian GSTIN")
|
|
return gst
|