纳税人识别号正则表达式
纳税人识别号是指纳税人在办理税务登记时,由税务机关为其编制的、用于识别纳税人的唯一编号。在企业与税务机关的往来中,纳税人识别号是非常重要的一个身份标识。
在进行数据清洗或验证时,我们可能会遇到需要验证纳税人识别号的场景。那么如何通过正则表达式验证纳税人识别号呢?
以下是正则表达式的示例代码,适用于验证中国大陆纳税人识别号:
^[0-9a-zA-Z]{15}|^[0-9a-zA-Z]{18}|^[0-9a-zA-Z]{20}$
上述正则表达式可以分为三个部分:第一部分是 15 位纳税人识别号的验证,第二部分是 18 位纳税人识别号的验证,第三部分是 20 位纳税人识别号的验证。
其中,纳税人识别号的构成规则如下:
- 15 位纳税人识别号由经营范围代码、登记序号组成;
- 18 位纳税人识别号由 6 位行政区划码、9 位组织机构代码、1 位校验码组成;
- 20 位纳税人识别号由 6 位行政区划码、9 位组织机构代码、5 位随机数字码组成。
根据以上规则,我们可以编写如下正则表达式来验证纳税人识别号:
# 15 位纳税人识别号
^[0-9a-zA-Z]{15}$
# 18 位纳税人识别号
^[0-9]{6}[0-9a-zA-Z]{9}[0-9xX]$
# 20 位纳税人识别号
^[0-9]{6}[0-9a-zA-Z]{9}[0-9]{5}$
需要注意的是,校验码是纳税人识别号的重要组成部分,因此在验证18位纳税人识别号时,需要通过算法计算得出校验码,并与实际校验码做比对。
以下是一个 Python 语言实现的例子:
def is_valid_nsrsbh(nsrsbh):
if len(nsrsbh) == 15:
return re.match(r'^[0-9a-zA-Z]{15}$', nsrsbh) is not None
elif len(nsrsbh) == 18:
code2num = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,
'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'I':18,'J':19,
'K':20,'L':21,'M':22,'N':23,'O':24,'P':25,'Q':26,'R':27,'S':28,
'T':29,'U':30,'V':31,'W':32,'X':33,'Y':34,'Z':35}
nums = []
for c in nsrsbh[:-1]:
if c in code2num:
nums.append(str(code2num[c]))
else:
return False
weight = [3, 7, 9, 10, 5, 8, 4, 2]
sum_value = 0
for i, num in enumerate(nums):
sum_value += weight[i] * int(num)
check_code_num = 11 - sum_value % 11
check_code = str(check_code_num) if check_code_num < 10 else 'X'
return nsrsbh[-1].upper
is_valid_nsrsbh函数说明
上述代码实现了一个用于验证纳税人识别号的函数 is_valid_nsrsbh。该函数接收一个字符串类型的参数 nsrsbh,表示待验证的纳税人识别号。如果该纳税人识别号格式合法,则返回 True,否则返回 False。
对于18位纳税人识别号,该函数通过算法计算得出校验码,并与实际校验码做比对。如果校验码一致,则该纳税人识别号格式合法,否则不合法。
下面是针对该函数的一些测试用例:
# 合法的15位纳税人识别号
assert is_valid_nsrsbh('123456789012345') is True
# 合法的18位纳税人识别号
assert is_valid_nsrsbh('123456789012345678') is True
assert is_valid_nsrsbh('43010200053071859X') is True
# 不合法的纳税人识别号
assert is_valid_nsrsbh('12345678901234567') is False
assert is_valid_nsrsbh('1234567890123456789') is False
assert is_valid_nsrsbh('43010200053071849X') is False
assert is_valid_nsrsbh('123456!2abc!45678') is False
assert is_valid_nsrsbh('智!慧!云!工!作!平!台!') is False
结论
正则表达式在验证纳税人识别号方面具有重要的应用价值。我们可以通过编写正则表达式来实现对纳税人识别号的格式校验,保障企业与税务机关之间的数据传输安全。使用代码实现正则表达式的验证逻辑,可以更加方便地将该逻辑集成到系统中,提高代码的可维护性和复用性。