纳税人识别号正则表达式

纳税人识别号正则表达式

纳税人识别号是指纳税人在办理税务登记时,由税务机关为其编制的、用于识别纳税人的唯一编号。在企业与税务机关的往来中,纳税人识别号是非常重要的一个身份标识。

在进行数据清洗或验证时,我们可能会遇到需要验证纳税人识别号的场景。那么如何通过正则表达式验证纳税人识别号呢?

以下是正则表达式的示例代码,适用于验证中国大陆纳税人识别号:

^[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

结论

正则表达式在验证纳税人识别号方面具有重要的应用价值。我们可以通过编写正则表达式来实现对纳税人识别号的格式校验,保障企业与税务机关之间的数据传输安全。使用代码实现正则表达式的验证逻辑,可以更加方便地将该逻辑集成到系统中,提高代码的可维护性和复用性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程