Translate

domingo, 12 de julho de 2026

O Mainframe Morreu... Pela Vigésima Vez Como a Narrativa do Mercado Ignorou a Engenharia

Bellacosa Mainframe e a milesima morte do mainframe



☕ Um Café no Bellacosa Mainframe

O Mainframe Morreu... Pela Vigésima Vez

Como a Narrativa do Mercado Ignorou a Engenharia — e Por Que o IBM Z Continua Vendendo Mais do que Nunca


Existe uma enorme diferença entre Marketing e Engenharia

A indústria de TI vive de novidades.

Todo ano aparece um novo "salvador da informática".

Foi assim com

  • Cliente-Servidor

  • ERP

  • Java

  • Linux

  • SOA

  • Cloud

  • Containers

  • Kubernetes

  • Blockchain

  • Big Data

  • IA

  • Agentic AI

Cada tecnologia chega acompanhada da mesma promessa:

"Agora tudo vai mudar."

Na prática...

Quase nada muda tão rapidamente.

Porque sistemas críticos não funcionam como aplicativos de celular.


Bellacosa Mainframe desde o projeto apollo a ia 

O problema do Mainframe

O Mainframe sempre sofreu um problema de imagem.

Imagine dois computadores.

Um deles

  • LEDs RGB

  • Docker

  • Kubernetes

  • React

  • Node

  • Linux

Parece moderno.


O outro

  • Tela verde

  • ISPF

  • COBOL

  • JCL

  • CICS

  • VSAM

Parece antigo.

Mas aparência e capacidade não são a mesma coisa.


A maior mentira repetida da TI

Durante quarenta anos ouvimos:

"O Mainframe vai desaparecer."

Curiosamente...

Quem dizia isso normalmente nunca trabalhou em um.

É semelhante a alguém afirmar:

"Os aviões estão ultrapassados."

Porque nunca entrou na cabine de um Boeing.

O dia em que decretaram a morte do mainframe

https://eljefemidnightlunch.blogspot.com/2026/02/o-dia-em-que-decretaram-morte-do.html

COBOL NÃO ESTÁ MORRENDO — ELE ESTÁ ESCONDENDO SEGREDOS QUE SUA EMPRESA NÃO CONSEGUE MAIS ENTENDER

https://eljefemidnightlunch.blogspot.com/2024/12/cobol-nao-esta-morrendo-ele-esta.html

20 ANOS APÓS O BUG DO MILÊNIO (Y2K) — O QUE O MUNDO MAINFRAME REALMENTE APRENDEU

https://eljefemidnightlunch.blogspot.com/2020/01/20-anos-apos-o-bug-do-milenio-y2k-o-que.html


O que realmente acontece dentro de um banco?

Quando você faz um PIX.

Em menos de alguns segundos acontecem dezenas de operações.

Exemplo:

Validação

↓

Autenticação

↓

Consulta de saldo

↓

Bloqueio

↓

Débito

↓

Crédito

↓

Logs

↓

Auditoria

↓

Notificação

↓

Confirmação

Tudo isso precisa acontecer:

  • sem erro

  • sem perda

  • sem duplicidade

  • em milissegundos

Milhões de vezes por minuto.


Isso não é um site

É um sistema transacional.

Existe uma enorme diferença.


Cloud resolve tudo?

Não.

Cloud resolve muitos problemas.

Mas não todos.

Cloud é excelente para:

  • aplicações web

  • microsserviços

  • APIs

  • elasticidade

  • processamento distribuído

  • IA

Mas quando falamos de

  • contas bancárias

  • previdência

  • cartões

  • clearing

  • bolsa de valores

o requisito muda completamente.

Agora entram em cena:

  • ACID

  • Consistência

  • Atomicidade

  • Integridade

  • Recuperação

  • Segurança

É exatamente onde o IBM Z domina.


Por que migrar é tão difícil?

Imagine um banco.

40 anos de software.

Imagine:

  • 80 milhões de clientes

  • 120 bilhões de linhas processadas diariamente

  • milhares de programas COBOL

  • centenas de bases DB2

  • milhares de jobs

  • MQ

  • CICS

  • IMS

Agora alguém diz:

"Vamos migrar tudo."

Parece simples.

Não é.


O iceberg

O código representa apenas a ponta.

Abaixo dele existem

Regras de negócio

+

Integrações

+

Auditoria

+

Compliance

+

Performance

+

Segurança

+

Histórico

Isso levou décadas para ser construído.


O verdadeiro patrimônio

As empresas não pagam bilhões pelo hardware.

Elas pagam pela previsibilidade.

Um banco prefere:

99,999%

todos os dias

do que

100%

durante uma semana
e
80%

na seguinte.


Modernizar ou substituir?

Essa talvez seja a maior mudança dos últimos anos.

Antes:

Replace

Hoje:

Modernize

É completamente diferente.


Modernização não significa abandonar COBOL

Significa adicionar.

Por exemplo:

REST API

↓

z/OS Connect

↓

COBOL

↓

DB2

O COBOL continua existindo.

Mas agora conversa com:

  • Java

  • Python

  • Node

  • Mobile

  • Cloud


IBM percebeu isso antes do mercado

Enquanto muita gente dizia

"o Mainframe morreu"

a IBM fazia outra coisa.

Investia bilhões.


Vieram:

  • Telum

  • Telum II

  • Spyre AI Accelerator

  • Quantum Safe Cryptography

  • zCX

  • OpenShift

  • LinuxONE

  • z/OS Container Extensions

  • AI embarcada

  • Vector Database

  • Hybrid Search

  • Watsonx

  • Zowe

  • Ansible

  • DevOps

Isso não é uma empresa abandonando um produto.

É exatamente o contrário.


O z17

O z17 representa uma mudança importante.

Não é apenas mais CPU.

É uma plataforma de IA.

Imagine um pagamento.

Enquanto a transação acontece...

O acelerador de IA verifica:

  • fraude

  • comportamento

  • risco

  • anomalias

Tudo em tempo real.

Sem enviar dados para outro servidor.


Isso reduz:

  • latência

  • custo

  • risco


Criptografia Pós-Quântica

Outro detalhe ignorado.

Os bancos pensam em décadas.

Não em meses.

Dados criptografados hoje poderão ser quebrados por computadores quânticos no futuro.

O IBM Z já incorpora algoritmos preparados para esse cenário, permitindo uma transição gradual para padrões pós-quânticos conforme evoluem as normas do setor.


Rack Mount

Essa talvez seja uma das notícias mais interessantes.

Durante anos muita gente associou Mainframe a isto:

███████████

Um enorme gabinete
ocupando uma sala inteira.

Hoje isso mudou.

O IBM z17 também passou a ser oferecido em formatos mais compactos, compatíveis com racks padrão, ampliando o acesso a organizações menores e novos cenários de uso.

É uma mudança estratégica.

IBM não diminuiu o Mainframe.

Ela diminuiu a barreira de entrada.


O mito do legado

"Legado" costuma ser usado como crítica.

Mas vamos trocar a palavra.

Em vez de

Legado

use

Patrimônio Digital

Muda completamente.


Imagine um castelo medieval.

Ele tem 700 anos.

Você derruba?

Ou reforma?


É exatamente isso que acontece.


O COBOL continua crescendo

Outro paradoxo.

Enquanto muitos decretavam sua morte,

universidades,

bootcamps,

IBM Z Xplore,

Open Mainframe Project,

Master the Mainframe,

IBM SkillsBuild,

Z Educator Experience,

formam milhares de novos profissionais.

Porque a demanda continua existindo.


A economia explica melhor que a tecnologia

Suponha duas opções.

Opção A

Migrar tudo.

Custo:

US$ 2 bilhões

Tempo:

8 anos

Risco:

Altíssimo


Opção B

Modernizar.

Custo:

20% disso

Resultado:

Mesmo software

Mais APIs

Mais IA

Mais segurança

Mais integração

Qual um CIO escolheria?

A resposta costuma ser evidente.


O efeito "iceberg invisível"

O usuário vê:

PIX realizado.

O Mainframe executou centenas de verificações invisíveis antes da confirmação.

Quando tudo funciona, ninguém percebe.

Esse é o maior elogio que uma infraestrutura crítica pode receber.


O Mainframe virou uma plataforma híbrida

Hoje ele conversa naturalmente com:

  • Kubernetes

  • Docker

  • Linux

  • OpenShift

  • Kafka

  • MQ

  • REST

  • GraphQL

  • Python

  • Java

  • Git

  • Jenkins

  • GitHub Actions

  • Zowe

  • VS Code

  • Ansible

  • Watsonx

  • APIs

  • Microsserviços

O Mainframe moderno não vive isolado; ele é parte central de arquiteturas híbridas.


O verdadeiro motivo do sucesso

Não é nostalgia.

Não é falta de opção.

É engenharia.

Quando uma empresa precisa processar bilhões de transações por dia com disponibilidade próxima de 100%, consistência, rastreabilidade, segurança e baixíssima latência, poucas plataformas oferecem um conjunto tão completo quanto o IBM Z.


O Programador COBOL Padawan

Existe uma grande lição aqui.

Não estude apenas aquilo que está na moda.

Estude aquilo que movimenta a economia.

Frameworks mudam.

Linguagens evoluem.

Clouds surgem.

Mas pagamentos, impostos, previdência, cartões, bolsa de valores e sistemas governamentais continuarão precisando de plataformas confiáveis.

É por isso que COBOL, CICS, Db2, IMS, MQ, z/OS e IBM Z continuam relevantes décadas depois.


O Grande Easter Egg

Há uma frase atribuída a Mark Twain que resume perfeitamente essa situação:

"Os rumores sobre minha morte foram muito exagerados."

Ela poderia ser aplicada ao Mainframe.

Há mais de vinte anos especialistas anunciam seu fim. No entanto, a cada nova geração — z13, z14, z15, z16 e agora z17 — a IBM demonstra que a plataforma continua evoluindo em desempenho, IA, segurança e integração.

Talvez o maior erro tenha sido imaginar que a evolução significaria abandonar o Mainframe. A realidade mostrou exatamente o contrário: o Mainframe evoluiu junto com a nuvem, a IA, os microsserviços e o DevOps, tornando-se um dos pilares da computação híbrida moderna.

Como costumo dizer no Bellacosa Mainframe:

O Mainframe não venceu porque resistiu às mudanças. Venceu porque mudou sem abrir mão daquilo que sempre fez melhor: processar as transações mais críticas do planeta com confiabilidade incomparável.

 

Capítulo 12 — O Legado dos Profetas e a Grande Lição para 2026

Bellacosa Mainframe e o legado dos profetas do apocalipse mainframe

☕ Um Café no Bellacosa Mainframe

Capítulo 12 — O Legado dos Profetas e a Grande Lição para 2026

O Mainframe Nunca Venceu a Guerra. Porque Ela Nunca Existiu.

Uma reflexão sobre quatro décadas de previsões, mostrando que a verdadeira evolução da computação ocorreu pela integração de tecnologias, e não pela substituição completa das anteriores.

Por

A evolução do IBM Mainframe até o IBM z17 simbolizando o legado da engenharia
A história do mainframe demonstra que inovação não significa destruir o passado, mas incorporar novas tecnologias preservando décadas de engenharia e conhecimento.

"A melhor previsão sobre tecnologia é construída observando décadas de engenharia, não meses de marketing."

— Bellacosa Mainframe

A guerra que nunca existiu

Durante décadas, parte da indústria apresentou a evolução tecnológica como uma sequência de substituições definitivas: mainframe versus Client/Server, servidores versus cloud, cloud versus edge, IA versus programação tradicional.

Na prática, a história mostrou que as plataformas bem-sucedidas coexistem, integram-se e evoluem continuamente para atender às necessidades do negócio.

O verdadeiro diferencial

A permanência do IBM Z decorre da combinação entre inovação constante e compatibilidade com décadas de aplicações críticas. Recursos modernos como Linux, OpenShift, APIs, DevOps, containers, automação e watsonx foram incorporados sem abandonar COBOL, CICS, Db2 e z/OS.

A grande lição para 2026

A computação corporativa não evolui por rupturas absolutas, mas pela capacidade de integrar novas ideias preservando segurança, disponibilidade, desempenho e regras de negócio construídas ao longo de muitas décadas.


Chegamos ao fim da jornada...

Ou talvez...

Ao começo de outra.

Durante este artigo viajamos quase quarenta anos pela História da Computação.

Visitamos redações.

Conferências.

Centros de pesquisa.

CPDs.

Datacenters.

Conhecemos jornalistas.

Analistas.

Consultores.

Professores.

Arquitetos.

E acompanhamos uma sequência impressionante de manchetes anunciando, repetidamente, o fim do IBM Mainframe.

Forbes.

New York Times.

InfoWorld.

Business Week.

Todas refletiam um momento específico da história.

Nenhuma delas foi escrita com má intenção.

Todas tentavam responder à mesma pergunta.

Como será a computação do futuro?

Essa continua sendo uma das perguntas mais difíceis da Engenharia.


Bellacosa Mainframe agradece ao professor Wolfgang Spruth

O maior personagem desta história

Curiosamente...

O protagonista deste artigo nunca foi a IBM.

Nem o COBOL.

Nem o CICS.

Nem o Db2.

Muito menos o z17.

O verdadeiro protagonista foi algo muito maior.

A evolução da Engenharia.

Porque, enquanto manchetes mudavam de direção a cada nova tendência...

A Engenharia seguia outro ritmo.

Mais lento.

Mais cuidadoso.

Mais pragmático.

Mais responsável.

Enquanto alguns prometiam revoluções anuais...

Os engenheiros pensavam em plataformas capazes de durar décadas.

E essa diferença explica praticamente toda esta história.


O professor que nos deixou um espelho

Se hoje podemos revisitar todas essas previsões, devemos isso ao Professor Wolfgang Spruth.

Seu trabalho The Death of the Mainframe não foi uma crítica à imprensa.

Foi um presente para as futuras gerações.

Spruth poderia simplesmente ter respondido aos artigos.

Não fez isso.

Preferiu arquivá-los.

Organizá-los.

Contextualizá-los.

Transformá-los em História.

Foi uma atitude tipicamente acadêmica.

Porque pesquisadores sabem que a memória também é uma forma de conhecimento.

Sem aquele pequeno conjunto de slides...

Grande parte dessas manchetes estaria perdida em arquivos esquecidos.

Graças a ele, hoje podemos estudá-las com calma, entender seu contexto e aprender com seus acertos e seus erros.


2026 é muito diferente de 1993

Imagine mostrar a um jornalista de 1993 um IBM z17.

Provavelmente ele perguntaria:

— Onde está o terminal verde?

Você responderia:

— Ainda existe.

Mas agora também existem:

  • APIs REST;

  • JSON;

  • OpenAPI;

  • Linux;

  • Containers;

  • Kubernetes;

  • OpenShift;

  • Git;

  • GitHub;

  • VS Code;

  • Python;

  • Java;

  • Node.js;

  • Go;

  • Zowe;

  • Ansible;

  • DevOps;

  • CI/CD;

  • watsonx;

  • Inteligência Artificial embarcada.

Talvez ele olhasse novamente para a máquina.

Depois perguntasse:

— Então isso ainda é um mainframe?

Você sorriria.

— Sim.

E talvez seja exatamente isso que torna essa plataforma tão fascinante.

Ela mudou completamente...

Sem deixar de ser ela mesma.


O COBOL também não ficou parado

Existe outra injustiça histórica.

Muitos imaginam COBOL como uma linguagem congelada em 1974.

Nada poderia estar mais distante da realidade.

O COBOL moderno conversa com:

JSON.

XML.

UTF-8.

APIs.

Serviços REST.

C.

Java.

Db2.

CICS.

MQ.

Git.

Pipelines DevOps.

Compiladores inteligentes.

Análise estática.

Testes automatizados.

Performance extremamente otimizada.

O COBOL não permaneceu vivo porque ficou parado.

Permaneceu vivo porque evoluiu.

Exatamente como qualquer tecnologia saudável deveria fazer.


O Db2, o CICS e o z/OS seguiram o mesmo caminho

O mesmo vale para todo o ecossistema IBM Z.

O Db2 evoluiu para um banco de dados altamente otimizado para cargas analíticas e transacionais.

O CICS transformou-se em uma plataforma moderna de serviços, APIs e integração.

O z/OS incorporou automação, segurança avançada, observabilidade, cloud híbrida e ferramentas abertas.

O BOB simplificou pipelines de build.

O Zowe aproximou novos desenvolvedores.

O Ansible levou automação moderna para o ambiente IBM Z.

O watsonx colocou Inteligência Artificial dentro da estratégia corporativa.

Nada disso existia quando aquelas manchetes foram escritas.


O maior erro continua acontecendo

Talvez a parte mais interessante desta história seja perceber que ela continua se repetindo.

Hoje o discurso mudou.

Não ouvimos mais:

"O Client/Server acabará com o Mainframe."

Agora ouvimos:

"A Inteligência Artificial acabará com os programadores."

Ou:

"LLMs substituirão arquitetos."

Ou:

"Ninguém mais precisará aprender linguagens de programação."

Será?

Talvez.

Talvez não.

Mas depois de estudar quarenta anos de História...

Aprendemos uma lição importante.

Desconfie sempre das previsões absolutas.

Principalmente quando elas envolvem palavras como:

"Nunca."

"Sempre."

"Definitivamente."

"Até 2030."

"A última."

A História da Computação costuma ser muito mais criativa do que qualquer cronograma.


O velho Jedi explica o segredo

Nosso Padawan encontra novamente o velho mestre.

Depois de toda essa jornada ele faz apenas uma pergunta.

— Mestre...

Qual foi o segredo do Mainframe?

O velho engenheiro permanece alguns segundos em silêncio.

Depois responde.

— O segredo nunca foi o hardware.

— Então foi o COBOL?

— Também não.

— O CICS?

— Não.

— O Db2?

— Ainda não.

— Então o que foi?

O mestre sorri.

Aponta para uma palavra escrita em um quadro branco.

Compatibilidade.

Depois escreve outra.

Evolução.

E mais uma.

Confiabilidade.

Por fim conclui.

— O Mainframe nunca obrigou seus clientes a jogar fora quarenta anos de investimento para aproveitar uma inovação.

Ele carregou o passado junto com o futuro.

Essa talvez tenha sido sua maior invenção.


A verdadeira Estrela da Morte

Como todo bom Bellacosa Mainframe...

Precisamos terminar com uma referência a Star Wars.

Durante anos o mercado enxergou o IBM Mainframe como se fosse a Estrela da Morte.

Gigante.

Antigo.

Centralizado.

Imponente.

Mas talvez a comparação correta seja outra.

O IBM Mainframe nunca foi a Estrela da Morte.

Ele sempre foi o Mestre Yoda.

Enquanto todos corriam atrás da próxima moda...

Ele permanecia em silêncio.

Aprendendo.

Evoluindo.

Adaptando-se.

Observando gerações inteiras de tecnologias nascerem.

Algumas brilharem intensamente.

Outras desaparecerem.

No final...

Ainda estava lá.

Mais experiente.

Mais moderno.

Mais forte.


Uma carta ao Padawan COBOL

Se você chegou até aqui...

Talvez esteja começando sua carreira.

Talvez já tenha décadas de experiência.

Não importa.

Existe uma única mensagem que gostaria que permanecesse com você.

Nunca estude uma tecnologia apenas porque ela está na moda.

Estude porque ela resolve um problema.

Nunca abandone uma tecnologia apenas porque alguém a chamou de "legado".

Descubra primeiro se ela continua gerando valor.

Nunca confunda marketing com arquitetura.

Nunca confunda novidade com inovação.

Nunca confunda interface bonita com engenharia sólida.

E, acima de tudo...

Nunca deixe de aprender.

Porque foi exatamente isso que permitiu ao IBM Mainframe atravessar mais de seis décadas.


A História escreveu seu próprio final

Em 1989 disseram que era um dinossauro.

Em 1991 marcaram a data de sua morte.

Em 1993 afirmaram que caminhava para a extinção.

Em 1994 começaram a perceber que talvez estivessem enganados.

Em 2026...

O IBM z17 executa Inteligência Artificial.

O watsonx auxilia empresas em escala global.

O COBOL continua movimentando trilhões de dólares.

O Db2 continua protegendo informações críticas.

O CICS continua processando bilhões de transações.

O z/OS continua sendo referência em disponibilidade e segurança.

E milhares de novos Padawans continuam aprendendo essa plataforma extraordinária.

A História foi generosa.

Ela não humilhou quem errou.

Apenas mostrou que prever o futuro é muito mais difícil do que construir um bom sistema.


Epílogo

Quando terminar este café...

Feche o navegador.

Abra seu editor.

Entre no TSO.

Compile um programa COBOL.

Execute um JCL.

Faça um SELECT no Db2.

Chame uma transação CICS.

Observe tudo funcionando.

Então lembre-se de uma frase.

O Mainframe nunca sobreviveu porque resistiu ao futuro.

Ele sobreviveu porque aprendeu a evoluir junto com ele.

Essa talvez seja a maior lição deixada por Wolfgang Spruth.

E certamente é a maior herança que podemos transmitir para a próxima geração de Programadores COBOL Padawans.

Que a Engenharia esteja com você.

Sempre.

Bellacosa Mainframe e o Funeral que nunca aconteceu



C:\BELLACOSA\COBOL\FUNERAL_QUE_NUNCA_ACONTECEU.HTML
★ BELLACOSA MAINFRAME APRESENTA ★

A MORTE DO COBOL

O Funeral que Nunca Aconteceu

Uma investigação histórica em 14 capítulos sobre as previsões, reportagens, buzzwords e profetas que anunciaram repetidamente o fim do COBOL — enquanto bilhões de transações continuavam sendo processadas silenciosamente.

SISTEMA ONLINE — 14 CAPÍTULOS DISPONÍVEIS
DIRETÓRIO DE CAPÍTULOS

README.TXT

Esta série investiga uma das narrativas mais repetidas da história da tecnologia: a suposta morte do COBOL. Durante décadas, revistas, jornais, consultorias e especialistas anunciaram seu desaparecimento. Entretanto, o COBOL permaneceu processando bancos, seguradoras, governos, cartões, pagamentos e sistemas críticos.

Os títulos e links acima são elementos HTML reais, permitindo que mecanismos de busca encontrem e rastreiem todos os capítulos. Os iframes funcionam apenas como previews visuais.

C:\> RUN BELLACOSA.EXE /COBOL /HISTORY /NO-FUNERAL _

★ BELLACOSA MAINFRAME ★ COBOL ★ IBM Z ★ HISTÓRIA DA COMPUTAÇÃO ★

Melhor visualizado em qualquer navegador com café disponível.

sábado, 11 de julho de 2026

CNPJ Alfanumérico sem Mistérios

 

Bellacosa Mainframe e o cnpj alfanumerico sem misterios

☕ Um Café no Bellacosa Mainframe

CNPJ Alfanumérico sem Mistérios

Quando o Programador COBOL Descobre que o Campo Continua com 14 Posições, mas o Mundo Inteiro ao Redor Dele Precisa Mudar

Durante décadas, o programador COBOL brasileiro olhou para o CNPJ como quem observa uma estrutura absolutamente estável:

99.999.999/9999-99

Quatorze algarismos. Sempre numérico. Frequentemente armazenado em um campo PIC 9(14), talvez compactado em COMP-3, validado por uma rotina de módulo 11 e utilizado como chave em arquivos VSAM, tabelas Db2, mapas BMS, mensagens MQ, arquivos fiscais e milhões de transações batch.

Parecia um daqueles contratos eternos do processamento corporativo.

Mas eis que surge uma nova especificação no horizonte:

AA.AAA.AAA/AAAA-99

O tamanho permanece com 14 posições, a máscara visual continua praticamente igual e os dois dígitos verificadores permanecem numéricos. Porém, as primeiras doze posições passam a aceitar números e letras maiúsculas de A a Z.

Para um usuário comum, isso pode parecer uma pequena mudança de formulário.

Para um programador COBOL, é uma alteração estrutural capaz de atravessar todo o ecossistema corporativo.

É aquele tipo de manutenção em que alguém diz:

“É só permitir letras no CNPJ.”

E três semanas depois existe uma War Room com quarenta pessoas, cinco fornecedores, dois bancos de dados, quatro sistemas satélites e um arquivo histórico criado em 1997 que ninguém sabia que ainda estava em produção.

Bem-vindo, Padawan, ao verdadeiro significado de mudança de domínio de dados.


1. O que é o CNPJ alfanumérico?

O CNPJ alfanumérico é o novo formato do identificador utilizado pelo Cadastro Nacional da Pessoa Jurídica.

A inscrição continuará possuindo 14 posições:

AA.AAA.AAA/AAAA-DV

Onde:

Posições 01 a 08: raiz da entidade
Posições 09 a 12: número de ordem do estabelecimento
Posições 13 e 14: dígitos verificadores numéricos

As primeiras doze posições poderão conter:

0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z

Os dois últimos caracteres continuarão sendo algarismos calculados pelo método de módulo 11.

Exemplos possíveis:

12.345.678/0001-95
AA.345.678/0003-29
AA.345.678/000A-29
12.345.678/000A-08
65.9BR.JGJ/0001-03

O último exemplo é apresentado pelo próprio simulador nacional da Receita como um identificador fictício de teste. (Receita Federal)

Observe o detalhe importante: não existe uma posição reservada exclusivamente para letras. Qualquer uma das primeiras doze posições poderá ser alfanumérica.

Portanto, esta validação está errada:

NN.NNN.NNN/AAAA-NN

A definição correta é:

XX.XXX.XXX/XXXX-NN

Em que cada X aceita um algarismo ou uma letra maiúscula.


2. Por que o CNPJ precisou mudar?

A origem da mudança é bastante pragmática: o crescimento contínuo do número de inscrições estava aproximando o modelo exclusivamente numérico de seus limites de capacidade.

Ao introduzir letras nas doze posições principais, a quantidade de combinações possíveis cresce de forma gigantesca.

No formato puramente numérico, do ponto de vista matemático bruto, doze posições oferecem:

10¹² combinações

Com 36 símbolos possíveis por posição — dez algarismos e 26 letras — o espaço teórico passa a ser:

36¹² combinações

Isso corresponde a aproximadamente:

4.738.381.338.321.616.896

Ou cerca de 4,7 quintilhões de combinações teóricas.

Naturalmente, nem todas serão necessariamente usadas: existem regras de geração, reservas técnicas, controle de duplicidade, combinações que podem ser bloqueadas e outras restrições administrativas. Ainda assim, a expansão é monumental.

Segundo a Receita Federal, o objetivo é evitar o esgotamento dos números disponíveis, garantir a continuidade do cadastro e preservar a identificação única das entidades. (Serviços e Informações do Brasil)

É uma solução bastante conhecida na engenharia de sistemas.

Quando o espaço de chaves está ficando pequeno, temos três caminhos principais:

  1. aumentar o tamanho do campo;

  2. mudar a representação;

  3. criar um novo identificador paralelo.

A Receita escolheu ampliar o alfabeto sem aumentar o comprimento.

Essa decisão reduz impactos visuais e documentais, pois o CNPJ continua tendo 14 posições. Entretanto, ela transfere grande parte da complexidade para os sistemas que assumiram, durante décadas, que CNPJ era um número.


3. Quando começa a implantação?

A regulamentação foi estabelecida pela Instrução Normativa RFB nº 2.229, publicada em outubro de 2024, alterando a disciplina cadastral anterior. O projeto oficial estabeleceu julho de 2026 como período de implantação. (Serviços e Informações do Brasil)

Em atualização divulgada pela Receita Federal em julho de 2026, o início operacional foi detalhado para ocorrer a partir de 31 de julho de 2026, com emissão progressiva dos primeiros identificadores no novo formato. (Serviços e Informações do Brasil)

Isso é importante porque documentos antigos podem mencionar genericamente “julho de 2026” ou até “1º de julho”. O planejamento mais recente divulgado pela Receita aponta o final do mês como início efetivo da geração.

Os CNPJs já existentes não serão convertidos, substituídos ou cancelados. Eles continuarão válidos exatamente como estão. O novo formato será utilizado progressivamente em novas inscrições. (Serviços e Informações do Brasil)

Isso cria um mundo de coexistência:

CNPJ antigo: 12.345.678/0001-95
CNPJ novo:   AB.3C5.678/00D1-42

Ambos deverão ser aceitos.

Portanto, não existe “migração de todos os CNPJs”. Existe uma migração dos sistemas para aceitar os dois formatos.

Essa diferença parece pequena, mas muda completamente a estratégia de implantação.


4. A grande armadilha: CNPJ nunca deveria ter sido tratado como número

Este é o momento em que o Mestre Bellacosa coloca a caneca sobre a mesa e pergunta ao Padawan:

CNPJ é realmente um número?

Matematicamente, não.

CNPJ é um identificador.

Ele não representa uma quantidade. Você não soma dois CNPJs, não calcula média de CNPJ e não divide um CNPJ por outro.

O fato de ele ter sido historicamente composto apenas por algarismos levou milhares de sistemas a armazená-lo como dado numérico.

Exemplo clássico:

01  WS-CNPJ.
    05 WS-CNPJ-BASE       PIC 9(12).
    05 WS-CNPJ-DV         PIC 9(02).

Ou pior:

01  WS-CNPJ               PIC 9(14) COMP-3.

O segundo formato economiza espaço, mas impede completamente o armazenamento de letras.

O novo modelo deixa explícito algo que a modelagem já deveria ter reconhecido:

CNPJ é texto estruturado.

A definição mais adequada passa a ser:

01  WS-CNPJ.
    05 WS-CNPJ-BASE       PIC X(12).
    05 WS-CNPJ-DV         PIC 9(02).

Ou, para facilitar movimentações:

01  WS-CNPJ-NORMALIZADO   PIC X(14).

O termo “normalizado” significa armazenar sem pontuação:

AB3C567800D142

Enquanto a representação formatada seria:

AB.3C5.678/00D1-42

Uma boa arquitetura separa essas duas coisas:

valor canônico: AB3C567800D142
apresentação:   AB.3C5.678/00D1-42

Não armazene pontos, barra e hífen na chave principal, salvo quando houver uma justificativa muito específica. Formatação pertence à camada de apresentação.


5. O impacto real em sistemas COBOL

Trocar PIC 9(14) por PIC X(14) é apenas o primeiro passo.

O impacto poderá alcançar:

  • copybooks;

  • arquivos sequenciais;

  • VSAM;

  • tabelas Db2;

  • mapas BMS;

  • telas IMS;

  • programas online;

  • jobs batch;

  • sort cards;

  • interfaces MQ;

  • APIs;

  • JSON e XML;

  • arquivos SPED;

  • relatórios;

  • chaves de indexação;

  • critérios de pesquisa;

  • rotinas de mascaramento;

  • validações de entrada;

  • programas Java, Natural, PL/I e Assembler integrados;

  • ferramentas de prevenção a fraude;

  • trilhas de auditoria;

  • data warehouses;

  • data lakes;

  • planilhas e sistemas departamentais.

Vamos analisar alguns exemplos.

5.1 Copybook antigo

05 CLIENTE-CNPJ           PIC 9(14).

Nova definição:

05 CLIENTE-CNPJ           PIC X(14).

Parece simples, mas todos os programas que incluem esse copybook precisam ser analisados.

Este comando pode deixar de compilar ou mudar de comportamento:

IF CLIENTE-CNPJ IS NUMERIC

Esta movimentação pode gerar problema:

COMPUTE WS-CHAVE = CLIENTE-CNPJ + 100

Esta classificação pode mudar:

SORT FIELDS=(1,14,ZD,A)

A definição ZD, de zoned decimal, não aceita letras. Será necessário tratar o campo como caractere:

SORT FIELDS=(1,14,CH,A)

Todavia, há uma nova questão: qual será a ordem esperada? Ordem binária EBCDIC? Ordem lógica da aplicação? Ordem usada por um sistema distribuído em ASCII?


6. O Easter egg que todo programador de mainframe precisa conhecer: ASCII não é EBCDIC

O algoritmo oficial do dígito verificador converte cada caractere utilizando seu valor na tabela ASCII, subtraindo 48.

Assim:

'0' ASCII 48  → 48 - 48 = 0
'1' ASCII 49  → 49 - 48 = 1
...
'9' ASCII 57  → 57 - 48 = 9

'A' ASCII 65  → 65 - 48 = 17
'B' ASCII 66  → 66 - 48 = 18
...
'Z' ASCII 90  → 90 - 48 = 42

Observe que A não vale 10. Ela vale 17.

Essa diferença existe porque o cálculo preserva a relação com os códigos ASCII.

Agora vem o perigo: z/OS tradicionalmente utiliza EBCDIC.

No EBCDIC, os valores dos caracteres são diferentes. Além disso, as letras não ocupam necessariamente uma sequência contínua equivalente à encontrada em ASCII.

Portanto, uma implementação como esta é conceitualmente perigosa no mainframe:

COMPUTE WS-VALOR =
    FUNCTION ORD(WS-CARACTERE) - 48

Ela pode funcionar em determinada plataforma, compilador ou codificação e falhar em outra.

O algoritmo precisa usar o valor lógico definido pela especificação, e não o código físico local do caractere.

A abordagem segura é mapear explicitamente:

0 → 0
1 → 1
...
9 → 9
A → 17
B → 18
...
Z → 42

Aqui está um maravilhoso Easter egg da modernização brasileira:

Um identificador nacional criado no século XXI obriga o programador COBOL a revisitar uma das guerras de codificação mais antigas da computação: ASCII versus EBCDIC.

No Mainframe, o detalhe nunca desaparece. Ele apenas espera pacientemente dentro de um byte.


7. Como calcular o dígito verificador

O cálculo continua utilizando módulo 11, mas agora cada caractere precisa ser convertido para seu valor numérico lógico.

Para o primeiro dígito verificador, aplicam-se os seguintes pesos às doze primeiras posições:

Posição:  01 02 03 04 05 06 07 08 09 10 11 12
Peso:      5  4  3  2  9  8  7  6  5  4  3  2

Cada valor é multiplicado pelo peso correspondente.

Depois:

RESTO = SOMA MOD 11

A regra do dígito é:

Se RESTO for 0 ou 1:
    DV = 0
Senão:
    DV = 11 - RESTO

Para o segundo dígito, o primeiro DV é anexado ao final e aplicam-se os pesos:

Posição:  01 02 03 04 05 06 07 08 09 10 11 12 DV1
Peso:      6  5  4  3  2  9  8  7  6  5  4  3  2

O mesmo cálculo de módulo 11 é repetido. A Receita mantém documentação técnica e arquivos de referência específicos para esse algoritmo. (Serviços e Informações do Brasil)


8. Estrutura COBOL recomendada

Uma estrutura didática poderia ser:

       01  WS-CNPJ.
           05 WS-CNPJ-CORPO       PIC X(12).
           05 WS-CNPJ-DV.
              10 WS-CNPJ-DV1      PIC 9.
              10 WS-CNPJ-DV2      PIC 9.

       01  WS-CONTROLE.
           05 WS-I                PIC 99 COMP.
           05 WS-VALOR            PIC 99 COMP.
           05 WS-SOMA             PIC 9(06) COMP.
           05 WS-RESTO            PIC 99 COMP.
           05 WS-CARACTERE        PIC X.

       01  WS-PESOS-DV1.
           05 FILLER              PIC X(12)
                                  VALUE X'050403020908070605040302'.

       01  WS-PESOS-DV1-R REDEFINES WS-PESOS-DV1.
           05 WS-PESO1            PIC X OCCURS 12 TIMES.

       01  WS-PESOS-DV2.
           05 FILLER              PIC X(13)
                              VALUE X'06050403020908070605040302'.

       01  WS-PESOS-DV2-R REDEFINES WS-PESOS-DV2.
           05 WS-PESO2            PIC X OCCURS 13 TIMES.

Em uma implementação corporativa, talvez seja mais legível declarar os pesos como campos numéricos individuais ou carregá-los em uma tabela durante a inicialização.

Por exemplo:

       01  WS-TAB-PESO1.
           05 WS-PESO1 OCCURS 12 TIMES PIC 9 COMP.

E inicializar:

       MOVE 5 TO WS-PESO1(1)
       MOVE 4 TO WS-PESO1(2)
       MOVE 3 TO WS-PESO1(3)
       MOVE 2 TO WS-PESO1(4)
       MOVE 9 TO WS-PESO1(5)
       MOVE 8 TO WS-PESO1(6)
       MOVE 7 TO WS-PESO1(7)
       MOVE 6 TO WS-PESO1(8)
       MOVE 5 TO WS-PESO1(9)
       MOVE 4 TO WS-PESO1(10)
       MOVE 3 TO WS-PESO1(11)
       MOVE 2 TO WS-PESO1(12)

É mais extenso, porém muito fácil de auditar.

No mundo fiscal, clareza costuma valer mais do que cinco linhas economizadas.


9. Conversão segura do caractere

Uma rotina simples pode utilizar EVALUATE:

       CONVERTER-CARACTERE.
           EVALUATE WS-CARACTERE
               WHEN '0' MOVE 0  TO WS-VALOR
               WHEN '1' MOVE 1  TO WS-VALOR
               WHEN '2' MOVE 2  TO WS-VALOR
               WHEN '3' MOVE 3  TO WS-VALOR
               WHEN '4' MOVE 4  TO WS-VALOR
               WHEN '5' MOVE 5  TO WS-VALOR
               WHEN '6' MOVE 6  TO WS-VALOR
               WHEN '7' MOVE 7  TO WS-VALOR
               WHEN '8' MOVE 8  TO WS-VALOR
               WHEN '9' MOVE 9  TO WS-VALOR
               WHEN 'A' MOVE 17 TO WS-VALOR
               WHEN 'B' MOVE 18 TO WS-VALOR
               WHEN 'C' MOVE 19 TO WS-VALOR
               WHEN 'D' MOVE 20 TO WS-VALOR
               WHEN 'E' MOVE 21 TO WS-VALOR
               WHEN 'F' MOVE 22 TO WS-VALOR
               WHEN 'G' MOVE 23 TO WS-VALOR
               WHEN 'H' MOVE 24 TO WS-VALOR
               WHEN 'I' MOVE 25 TO WS-VALOR
               WHEN 'J' MOVE 26 TO WS-VALOR
               WHEN 'K' MOVE 27 TO WS-VALOR
               WHEN 'L' MOVE 28 TO WS-VALOR
               WHEN 'M' MOVE 29 TO WS-VALOR
               WHEN 'N' MOVE 30 TO WS-VALOR
               WHEN 'O' MOVE 31 TO WS-VALOR
               WHEN 'P' MOVE 32 TO WS-VALOR
               WHEN 'Q' MOVE 33 TO WS-VALOR
               WHEN 'R' MOVE 34 TO WS-VALOR
               WHEN 'S' MOVE 35 TO WS-VALOR
               WHEN 'T' MOVE 36 TO WS-VALOR
               WHEN 'U' MOVE 37 TO WS-VALOR
               WHEN 'V' MOVE 38 TO WS-VALOR
               WHEN 'W' MOVE 39 TO WS-VALOR
               WHEN 'X' MOVE 40 TO WS-VALOR
               WHEN 'Y' MOVE 41 TO WS-VALOR
               WHEN 'Z' MOVE 42 TO WS-VALOR
               WHEN OTHER
                   MOVE 99 TO WS-VALOR
           END-EVALUATE.

Sim, são muitas linhas.

Porém, esta rotina é:

  • explícita;

  • independente de ASCII ou EBCDIC;

  • portável;

  • auditável;

  • fácil de testar;

  • fiel à especificação.

Em ambientes modernos, também seria possível usar uma tabela indexada. Ainda assim, documente claramente por que A = 17.

Sem essa documentação, algum programador bem-intencionado poderá “corrigir” a rotina no futuro, fazendo A = 10, e produzir um belo incidente fiscal.


10. Cálculo COBOL simplificado do primeiro DV

       CALCULAR-DV1.
           MOVE ZERO TO WS-SOMA

           PERFORM VARYING WS-I FROM 1 BY 1
                   UNTIL WS-I > 12

               MOVE WS-CNPJ-CORPO(WS-I:1)
                 TO WS-CARACTERE

               PERFORM CONVERTER-CARACTERE

               IF WS-VALOR = 99
                   MOVE 'S' TO WS-ERRO-CNPJ
                   EXIT PARAGRAPH
               END-IF

               COMPUTE WS-SOMA =
                   WS-SOMA +
                   (WS-VALOR * WS-PESO1(WS-I))
           END-PERFORM

           COMPUTE WS-RESTO =
               FUNCTION MOD(WS-SOMA, 11)

           IF WS-RESTO < 2
               MOVE ZERO TO WS-CNPJ-DV1
           ELSE
               COMPUTE WS-CNPJ-DV1 = 11 - WS-RESTO
           END-IF.

Para o segundo DV, processe novamente as doze posições e depois multiplique o primeiro dígito pelo peso final 2.

       CALCULAR-DV2.
           MOVE ZERO TO WS-SOMA

           PERFORM VARYING WS-I FROM 1 BY 1
                   UNTIL WS-I > 12

               MOVE WS-CNPJ-CORPO(WS-I:1)
                 TO WS-CARACTERE

               PERFORM CONVERTER-CARACTERE

               COMPUTE WS-SOMA =
                   WS-SOMA +
                   (WS-VALOR * WS-PESO2(WS-I))
           END-PERFORM

           COMPUTE WS-SOMA =
               WS-SOMA + (WS-CNPJ-DV1 * 2)

           COMPUTE WS-RESTO =
               FUNCTION MOD(WS-SOMA, 11)

           IF WS-RESTO < 2
               MOVE ZERO TO WS-CNPJ-DV2
           ELSE
               COMPUTE WS-CNPJ-DV2 = 11 - WS-RESTO
           END-IF.

Em produção, acrescente tratamento formal de erro, mensagens padronizadas, logging, retorno de condição e testes automatizados.


11. Normalização da entrada

O usuário poderá informar:

AB.123.CD4/0001-55

Ou:

AB123CD4000155

A aplicação deve decidir qual contrato aceita.

Uma boa rotina de normalização pode:

  1. remover ., / e -;

  2. eliminar espaços laterais;

  3. converter letras minúsculas em maiúsculas;

  4. verificar se restaram exatamente 14 caracteres;

  5. validar as primeiras doze posições;

  6. confirmar que as duas últimas são numéricas;

  7. calcular e comparar os dígitos verificadores.

Não aceite silenciosamente qualquer caractere.

Os permitidos nas primeiras posições são apenas:

0-9
A-Z

Portanto, estes devem ser rejeitados:

Á
Ç
@
#
espaço
underscore
letra minúscula sem normalização

A Receita orienta que os sistemas considerem todas as letras de A a Z. O controle de combinações eventualmente proibidas, como formações ofensivas ou confusas, será realizado internamente pela própria Receita; as empresas não precisam reproduzir essa lista.


12. Não use IS NUMERIC para validar o CNPJ inteiro

Antes:

IF WS-CNPJ IS NUMERIC
    CONTINUE
ELSE
    MOVE 'CNPJ INVALIDO' TO WS-MENSAGEM
END-IF

Depois da mudança, isso rejeitará corretamente todos os novos CNPJs — o que significa que estará funcionalmente errado.

A validação precisa ser segmentada:

Posições 1 a 12:
    letras A-Z ou números 0-9

Posições 13 e 14:
    somente números

Conjunto completo:
    dígito verificador válido

Uma verificação de formato nunca substitui a validação do DV.

Este identificador possui formato válido:

ABCDEFGHIJKL00

Mas não significa que seus dígitos verificadores sejam corretos ou que exista uma entidade registrada com ele.

São três conceitos diferentes:

formato válido
dígito verificador válido
cadastro existente

Um programa maduro não mistura essas responsabilidades.


13. Db2: o problema escondido nas colunas DECIMAL

Imagine esta tabela:

CREATE TABLE CLIENTE
(
    CNPJ DECIMAL(14,0) NOT NULL,
    NOME VARCHAR(100)
);

Ela não poderá armazenar o novo formato.

A coluna precisará tornar-se:

CNPJ CHAR(14)

ou:

CNPJ VARCHAR(14)

Para identificadores de tamanho fixo, CHAR(14) costuma ser uma escolha natural.

Entretanto, alterar uma coluna primária pode envolver:

  • índices;

  • chaves estrangeiras;

  • views;

  • triggers;

  • packages Db2;

  • programas com SQL estático;

  • DCLGENs;

  • rotinas ETL;

  • replicação;

  • unloads;

  • data warehouses;

  • APIs;

  • relatórios;

  • programas que usam host variable numérica.

Uma host variable antiga:

01 HV-CNPJ PIC S9(14) COMP-3.

precisará ser substituída por:

01 HV-CNPJ PIC X(14).

Depois será necessário regenerar o DCLGEN, recompilar, realizar precompile, bind e testes de regressão.

Não trate isso apenas como alteração de tela.


14. Arquivos VSAM e chaves

Considere um KSDS cujo CNPJ esteja na chave:

KEYS(14 0)

O comprimento continua igual. Isso parece ótimo.

Mas se o campo era interpretado como numérico em programas, sorts ou relatórios, o comportamento precisará ser revisto.

Outro cuidado é a ordenação.

Em EBCDIC, a sequência de comparação de caracteres é diferente da sequência ASCII. Um arquivo ordenado no mainframe pode produzir uma ordem diferente de um banco distribuído.

Para identificadores únicos, isso normalmente não invalida a chave. Contudo, pode afetar:

  • relatórios;

  • comparações de faixa;

  • cargas ordenadas;

  • reconciliações;

  • merge entre arquivos de plataformas diferentes;

  • processamento com START e READ NEXT.

Evite atribuir significado comercial à ordem lexical do CNPJ.

Um CNPJ “maior” não é mais novo, mais importante ou pertencente a determinada região.


15. Letras não representam estado, porte ou natureza jurídica

As letras serão atribuídas pelo sistema de geração e não carregarão inteligência sobre:

  • Unidade da Federação;

  • município;

  • porte;

  • atividade econômica;

  • natureza jurídica;

  • regime tributário;

  • data de abertura;

  • órgão de registro.

A Receita esclarece que não haverá conexão semântica entre as letras e atributos cadastrais.

Portanto, nunca escreva uma regra como:

IF WS-CNPJ(1:1) = 'S'
    MOVE 'SAO PAULO' TO WS-UF
END-IF

O identificador é opaco.

Ele identifica a entidade, mas não deve ser “decodificado” para inferir informações.

Essa é uma prática moderna importante: identificadores não devem carregar regras de negócio ocultas, a menos que isso faça parte de uma especificação formal.


16. E o famoso sufixo 0001?

Historicamente, muitos sistemas assumiram:

0001 = matriz
qualquer outro valor = filial

A própria Receita informa que 0001 continuará inicialmente associado à matriz quando o número for gerado. Porém, essa não é uma associação permanente: uma filial poderá posteriormente tornar-se o estabelecimento principal, mesmo possuindo outro número de ordem.

Portanto, isto é uma regra frágil:

IF WS-CNPJ(9:4) = '0001'
    MOVE 'MATRIZ' TO WS-TIPO
ELSE
    MOVE 'FILIAL' TO WS-TIPO
END-IF

A informação de matriz ou filial deve vir de um atributo cadastral confiável, não de uma interpretação eterna do sufixo.

Além disso, o número de ordem poderá conter letras:

000A
00B7
A001

Quem armazenou a ordem da filial em PIC 9(4) também terá trabalho.


17. APIs, JSON e XML

Este JSON antigo já tratava corretamente o CNPJ:

{
  "cnpj": "12345678000195"
}

Este, não:

{
  "cnpj": 12345678000195
}

O identificador deve ser enviado como string.

Novo exemplo:

{
  "cnpj": "AB3C567800D142"
}

Em OpenAPI:

cnpj:
  type: string
  minLength: 14
  maxLength: 14
  pattern: '^[A-Z0-9]{12}[0-9]{2}$'

A expressão regular valida apenas a estrutura. O cálculo do DV continuará necessário.

Para o COBOL usando JSON GENERATE, defina o campo como alfanumérico:

05 CNPJ PIC X(14).

Revise também os schemas XML. O ecossistema de documentos fiscais eletrônicos vem publicando notas técnicas e atualizações de XSD para suportar o novo formato, incluindo NF-e, NFC-e e EFD-Reinf. (Nota Fiscal Eletrônica)


18. Estratégia de implantação sem derrubar a produção

Não faça uma alteração Big Bang sem inventário.

Uma estratégia madura pode ser dividida em ondas.

Onda 1 — Descoberta

Procure por:

PIC 9(14)
PIC 9(12)
PIC 9(8)
PIC 9(4)
COMP-3
CNPJ
CGC
CGC-CPF
NUM-CNPJ
CNPJ-NUM
IS NUMERIC
NUMERIC-EDITED

Não pesquise apenas por CNPJ.

Sistemas antigos podem ainda usar o termo CGC, nome histórico anterior do cadastro.

Procure também:

DECIMAL(14,0)
NUMERIC(14)
BIGINT
CHAR(14)

O objetivo é construir um inventário de:

  • fontes;

  • copybooks;

  • tabelas;

  • arquivos;

  • interfaces;

  • relatórios;

  • rotinas de validação;

  • consumidores externos.

Onda 2 — Classificação

Classifique os componentes:

A – armazena CNPJ
B – recebe CNPJ
C – envia CNPJ
D – valida CNPJ
E – formata CNPJ
F – usa CNPJ como chave
G – apenas exibe CNPJ

Os itens que usam o identificador como chave ou campo numérico possuem prioridade maior.

Onda 3 — Modelo canônico

Defina um padrão corporativo:

CNPJ interno:     X(14), sem máscara, maiúsculo
CNPJ apresentado: XX.XXX.XXX/XXXX-XX
DV:               módulo 11 oficial
Codificação:      contrato independente de ASCII/EBCDIC

Onda 4 — Compatibilidade dupla

Teste simultaneamente:

CNPJ exclusivamente numérico
CNPJ com uma letra
CNPJ com várias letras
CNPJ com letras na raiz
CNPJ com letras na ordem
CNPJ com zero à esquerda
CNPJ inválido
DV incorreto
letra minúscula
pontuação
espaços
caracteres especiais

Onda 5 — Implantação observável

Crie métricas:

quantidade de CNPJs alfanuméricos recebidos
rejeições por formato
rejeições por DV
erros de integração
truncamentos
conversões indevidas
mensagens enviadas para DLQ
falhas em arquivos fiscais

Modernização sem observabilidade é apenas uma nova forma de torcer para que tudo funcione.


19. Casos de teste essenciais

Uma suíte mínima deveria incluir:

Caso 1 — CNPJ numérico atual

Entrada: CNPJ numérico válido
Resultado: aceito

Caso 2 — Raiz alfanumérica

Entrada: letras entre as posições 1 e 8
Resultado: aceito se o DV estiver correto

Caso 3 — Ordem alfanumérica

Entrada: letras entre as posições 9 e 12
Resultado: aceito se o DV estiver correto

Caso 4 — Identificador totalmente numérico depois da mudança

Ainda poderá ocorrer, pois a geração progressiva poderá produzir combinações exclusivamente numéricas. Não crie uma regra que exija pelo menos uma letra.

Caso 5 — Minúsculas

ab12cd34000199

Defina o comportamento:

normalizar para maiúsculas
ou
rejeitar por contrato

A primeira opção costuma proporcionar melhor experiência, desde que seja documentada.

Caso 6 — Caractere inválido

AB12ÇD34000199

Deve ser rejeitado.

Caso 7 — DV alfabético

AB12CD340001A9

Deve ser rejeitado, pois as duas últimas posições são exclusivamente numéricas.

Caso 8 — Campo com pontuação

AB.12C.D34/0001-99

Valide após a normalização, caso a interface permita máscara.

Caso 9 — Valor vazio

Decida se o campo é obrigatório ou opcional. Não transforme espaços em zeros silenciosamente.

Caso 10 — Integração EBCDIC/ASCII

Envie o mesmo CNPJ entre:

COBOL/zOS
Java/Linux
API REST
MQ
arquivo UTF-8
arquivo EBCDIC

Confirme que o valor não sofreu tradução incorreta.


20. Use o simulador oficial

A Receita Federal disponibilizou um simulador capaz de gerar CNPJs fictícios, numéricos e alfanuméricos, inclusive combinações para matriz e filiais. A ferramenta pode gerar lotes para testes e exportação, auxiliando equipes de desenvolvimento na adaptação. (Receita Federal)

Essa é uma excelente oportunidade para criar:

  • massa de testes unitários;

  • arquivos de entrada;

  • cenários de integração;

  • registros Db2;

  • entradas de CICS;

  • mensagens MQ;

  • testes de API;

  • validação de relatórios.

Não invente apenas três exemplos manualmente.

Gere centenas de casos e execute-os automaticamente.

No pipeline:

Build
  ↓
Análise estática
  ↓
Teste unitário do DV
  ↓
Teste com CNPJ numérico
  ↓
Teste com CNPJ alfanumérico
  ↓
Teste de integração
  ↓
Teste de regressão
  ↓
Deploy controlado

O CNPJ alfanumérico é um excelente caso de uso para ZUnit, COBOL Check, Galasa, DBB, Jenkins e pipelines corporativos.


21. Dicas do Mestre Bellacosa

Nunca converta o CNPJ para número

Não faça:

MOVE FUNCTION NUMVAL(WS-CNPJ) TO WS-CNPJ-NUM

Além de falhar com letras, isso pode eliminar zeros à esquerda.

Não remova letras para “manter compatibilidade”

Esta aberração:

AB12CD34000199 → 1234000199

destrói o identificador e pode criar colisões.

Não use espaços para substituir letras

Um campo com letras não reconhecidas deve causar erro controlado, não limpeza silenciosa.

Centralize a validação

Crie uma rotina comum, serviço ou módulo compartilhado.

Exemplo:

CALL 'VALCNPJ2'
    USING CNPJ-ENTRADA
          CNPJ-NORMALIZADO
          CODIGO-RETORNO
          MENSAGEM-RETORNO

Assim, todos os sistemas seguem a mesma regra.

Versione o copybook

Não altere um copybook crítico sem avaliar seus consumidores.

Uma estratégia possível:

CPYCNPJ1 – formato legado
CPYCNPJ2 – formato alfanumérico

Depois, migre os programas progressivamente.

Não confunda máscara com conteúdo

A máscara possui 18 caracteres:

AA.AAA.AAA/AAAA-99

O conteúdo canônico possui 14:

AAAAAAAAAAAA99

Preserve os zeros à esquerda

Como o campo passa a ser textual, a preservação fica mais natural. Ainda assim, evite funções que façam conversão numérica intermediária.

Registre o valor recebido e o normalizado

Em sistemas críticos, pode ser útil registrar:

valor original
valor normalizado
resultado da validação
origem da transação
data e hora

Isso facilita auditoria e investigação.


22. Curiosidades importantes

O número continuará público

O novo formato não é código secreto, token de rastreamento ou identificação criptografada. A Receita afirma que não existe informação escondida na composição.

Não existe inteligência artificial escolhendo o CNPJ

Apesar da palavra “alfanumérico” parecer sofisticada, a Receita esclarece que a geração não utiliza IA para atribuir significado ao número.

A chave Pix poderá usar o novo formato

Empresas com CNPJ alfanumérico poderão utilizá-lo como chave Pix, enquanto as chaves dos CNPJs numéricos existentes continuam válidas.

CNPJs numéricos e alfanuméricos coexistirão por décadas

Como os registros antigos não serão modificados, é perfeitamente possível que sistemas ainda processem CNPJs exclusivamente numéricos muitas décadas depois da implantação.

Portanto, não crie duas lógicas separadas desnecessariamente:

validador antigo
validador novo

Crie uma lógica compatível com ambos.

O algoritmo alfanumérico, quando aplicado a algarismos, preserva o mapeamento de 0 a 9, permitindo tratar o formato numérico dentro da mesma arquitetura.


23. O verdadeiro problema não está no campo

O grande risco do CNPJ alfanumérico não é a largura.

Ela continua sendo 14.

O risco está nas suposições invisíveis acumuladas durante décadas:

CNPJ sempre é numérico.
CNPJ pode ser COMP-3.
Filial sempre é 9(4).
0001 sempre significa matriz.
IS NUMERIC valida o campo.
SORT ZD funciona.
Banco pode usar DECIMAL.
JSON pode enviar um número.
A posição das letras tem significado.
ASCII e EBCDIC produzem o mesmo valor.

Cada uma dessas suposições pode estar escondida em milhares de linhas.

É por isso que bons profissionais de sistemas legados não começam mudando código.

Eles começam construindo um mapa de dependências.


Conclusão: o campo não cresceu, mas o sistema amadureceu

Padawan, o CNPJ alfanumérico é uma daquelas mudanças que ensinam uma poderosa lição de engenharia.

Durante décadas, muitos sistemas confundiram representação com significado.

O CNPJ parecia numérico porque era formado por números. Entretanto, ele nunca foi uma quantidade. Sempre foi uma chave textual de identificação.

Agora, a chegada das letras remove essa ilusão.

O programador COBOL que simplesmente trocar:

PIC 9(14)

por:

PIC X(14)

terá iniciado o trabalho.

O profissional que revisar arquivos, bancos, chaves, interfaces, módulos de validação, ordenação, codificação, APIs, documentos fiscais, observabilidade e testes terá realmente preparado o sistema.

No IBM Z aprendemos há décadas que sistemas críticos não quebram apenas por grandes revoluções.

Eles quebram por pequenas suposições que deixaram de ser verdade.

O novo CNPJ não é apenas uma letra chegando a um campo antigo.

É um lembrete de que contratos de dados também envelhecem, regras aparentemente eternas também mudam e nenhum PIC 9 deve ser considerado imortal.

Prepare seus copybooks.

Revise seus DCLGENs.

Convoque seus testes automatizados.

E nunca se esqueça do Easter egg mais importante desta jornada:

Quando a especificação disser ASCII e seu programa estiver rodando em EBCDIC, não confie no byte. Confie na regra de negócio.

Porque no Bellacosa Mainframe, até uma simples letra A pode valer 17 — e separar um processamento concluído com sucesso de uma longa madrugada examinando dumps no abençoado SDSF.