如何提取巴西税号CNPJ的通用正则表达式匹配方案

来源:语言推理作者:印尼程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何提取巴西税号CNPJ的通用正则表达式匹配方案》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何提取巴西税号CNPJ的通用正则表达式匹配方案》有用,将其分享出去将是对创作者最好的鼓励。

巴西税号CNPJ的全称是Cadastro Nacional da Pessoa Jurídica,是巴西联邦税务局分配给企业的唯一识别编号,标准格式为XX.XXX.XXX/XXXX-XX,共14位数字,包含分隔符的情况下总长度为18位。在数据处理过程中,我们经常需要从文本、表单输入或者数据库字段中提取符合规则的CNPJ信息,这时候就需要使用正则表达式来完成匹配。

如何提取巴西税号CNPJ的通用正则表达式匹配方案

CNPJ的格式规则说明

CNPJ的基础结构分为四个部分,具体规则如下:

  • 前8位为基础编号,为企业的核心识别码
  • 第9到12位为分支编号,用于区分同一企业的不同分支机构
  • 第13到14位为校验位,通过特定算法计算得出,用于验证CNPJ的合法性
  • 标准展示格式会在对应位置添加点、斜杠、横杠分隔符,分别为XX.XXX.XXX/XXXX-XX

实际业务中,CNPJ可能出现带分隔符、不带分隔符、分隔符缺失或错误等多种情况,因此通用匹配方案需要兼容这些场景。

通用正则表达式设计

我们需要设计的通用正则需要满足以下匹配场景:

  • 完整带标准分隔符的CNPJ:XX.XXX.XXX/XXXX-XX
  • 不带任何分隔符的14位纯数字CNPJ
  • 分隔符存在但不完整的CNPJ,比如缺少部分点或者斜杠的情况

最终的通用正则表达式如下:

d{2}.?d{3}.?d{3}/?d{4}-?d{2}|d{14}

这个正则的含义拆解:

  • d{2}.?d{3}.?d{3}/?d{4}-?d{2} 匹配带可选分隔符的CNPJ,其中.?表示点号可选,/?表示斜杠可选,-?表示横杠可选
  • | 是正则的或运算符,连接两种匹配规则
  • d{14} 匹配14位纯数字的CNPJ

不同场景下的使用示例

Python中提取CNPJ

使用re模块实现从文本中提取所有符合规则的CNPJ:

import re

# 通用CNPJ正则
cnpj_pattern = r'd{2}.?d{3}.?d{3}/?d{4}-?d{2}|d{14}'

# 测试文本,包含多种格式的CNPJ
test_text = "企业A的CNPJ是12.345.678/0001-90,企业B的CNPJ是12345678000190,企业C的CNPJ是12.345.678/0001-90"

# 提取所有匹配的CNPJ
cnpj_list = re.findall(cnpj_pattern, test_text)
print("提取到的CNPJ列表:")
for cnpj in cnpj_list:
    print(cnpj)

JavaScript中校验CNPJ格式

在前端表单校验场景中使用该正则判断用户输入的CNPJ是否合法:

// 通用CNPJ正则
const cnpjPattern = /d{2}.?d{3}.?d{3}/?d{4}-?d{2}|d{14}/;

// 测试不同的CNPJ输入
const testCnpjs = ["12.345.678/0001-90", "12345678000190", "12.345.678/000190", "1234567890"];

testCnpjs.forEach(cnpj => {
    if (cnpjPattern.test(cnpj)) {
        console.log(`${cnpj} 是合法的CNPJ格式`);
    } else {
        console.log(`${cnpj} 不是合法的CNPJ格式`);
    }
});

Java中处理CNPJ提取

使用Java的正则表达式类完成CNPJ的提取操作:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;

public class CnpjExtractor {
    public static void main(String[] args) {
        // 通用CNPJ正则
        String cnpjRegex = "\d{2}\.?\d{3}\.?\d{3}\/?\d{4}\-?\d{2}|\d{14}";
        Pattern pattern = Pattern.compile(cnpjRegex);
        
        // 测试文本
        String testText = "合作方信息:CNPJ 12.345.678/0001-90,备用编号12345678000190";
        Matcher matcher = pattern.matcher(testText);
        
        List<String> cnpjList = new ArrayList<>();
        while (matcher.find()) {
            cnpjList.add(matcher.group());
        }
        
        System.out.println("提取到的CNPJ:");
        for (String cnpj : cnpjList) {
            System.out.println(cnpj);
        }
    }
}

正则的优化建议

如果需要严格校验CNPJ的合法性,仅用上述正则是不够的,还需要额外添加校验位校验逻辑,因为上述正则会匹配所有符合格式的数字组合,包含校验位错误的无效CNPJ。如果只需要提取符合格式的文本不需要校验合法性,上述通用正则已经可以满足大部分场景需求。

另外在批量处理大量文本时,可以先对文本做预处理,去除无关的特殊字符,再使用正则匹配,可以提升匹配效率,减少误匹配的概率。

CNPJ正则表达式巴西税号正则匹配修改时间:2026-06-27 01:06:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。