字母数字格式的巴西国家法人登记号已到来:如何在 JavaScript 中验证新格式(使用官方算法)

发布日期:2026-07-26 10:02:34  浏览量 :0
发布日期:2026-07-26 10:02:34  
0

2026年7月31日标志着巴西国家法人登记号(CNPJ)自设立以来最大的变革:新成立的公司可能会获得包含字母的CNPJ,例如12.ABC.345/01DE-35。如果您的系统用于注册客户或供应商,这将影响到您——即使目前您的客户中还没有人使用新的CNPJ。

真正发生的变化

巴西联邦税务局第2.229/2024号规范性指令规定,CNPJ的前12位(根号+分支序号)现在可以接受0-9A-Z。两位校验码仍然保持为数字。现有的CNPJ不会改变——两种格式将共存。

遗留系统中会出现的问题:

  • 数据库中的BIGINT/NUMERIC列 → 无法保存字母
  • 验证器中的^\d{14}$ → 会拒绝有效的CNPJ
  • parseInt(cnpj) → 会导致静默数据损坏
  • 表单中的掩码99.999.999/9999-99 → 用户无法输入

算法(比看起来更简单)

校验码的计算仍然沿用旧的模11算法。唯一的变化是:每个字符以其ASCII码值减去48参与计算。数字保持其原有值('0'→0 … '9'→9),字母的值则为17到42('A'→17 … 'Z'→42)。对于纯数字的CNPJ,计算结果与旧算法完全相同——因此兼容性是完全的。

function checkDigits(base12) {
  const W1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
  const W2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
  const val = (ch) => ch.charCodeAt(0) - 48; // '0'-'9' → 0-9, 'A'-'Z' → 17-42

  const dv = (chars, weights) <

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据