CPF com Zeros à Esquerda: Como Preservar em Cada Plataforma
Zeros à esquerda em CPF são um problema recorrente. O CPF 001.002.003-00 tem valor numérico 100200300, e qualquer sistema que trate CPF como número descarta os zeros, corrompendo o dado. Este guia cobre soluções para cada plataforma.
Por que zeros à esquerda importam
Dos ~1,2 bilhão de CPFs válidos, cerca de 10% começam com zero. O primeiro dígito indica a região fiscal de emissão, e o zero corresponde ao Rio Grande do Sul. Descartar esses zeros não é um problema cosmético: muda o significado do dado e quebra a validação.
CPF correto: 001.002.003-00 → 00100200300 (11 dígitos)
CPF corrompido: → 100200300 (9 dígitos → inválido)Excel
O Excel trata números como valores numéricos por padrão, descartando zeros à esquerda ao importar ou digitar.
Solução 1: formato personalizado
Se o CPF já está no Excel como número, aplique o formato 000.000.000-00 (Ctrl+1 → Personalizado). O Excel exibe com zeros, mas o valor armazenado continua numérico.
Valor na célula: 100200300
Exibição: 001.002.003-00Solução 2: importar como texto
Ao abrir CSV no Excel, use o assistente de importação e defina a coluna de CPF como Texto. No Power Query ou Get Data, defina o tipo antes de carregar.
Solução 3: prefixo apóstrofo
Digitar '00100200300 (com apóstrofo) força o Excel a tratar como texto. O apóstrofo não aparece na célula.
Veja o guia completo de formatação de CPF no Excel.
CSV
O problema geralmente aparece na leitura, não na escrita. O CSV armazena texto corretamente, mas o programa que abre o arquivo pode interpretar como número.
Ao gerar CSV:
# Python: forçar aspas ao redor do CPF
import csv
with open("dados.csv", "w", newline="") as f:
writer = csv.writer(f, quoting=csv.QUOTE_ALL)
writer.writerow(["nome", "cpf"])
writer.writerow(["João", "00100200300"])Resultado: "João","00100200300". As aspas sinalizam texto para qualquer parser.
Ao abrir CSV no Excel:
Use Dados → De Texto/CSV → selecione a coluna como Texto antes de importar. Se abrir direto com duplo-clique, o Excel converte automaticamente para número.
Banco de dados
Use CHAR(11) ou VARCHAR(11), nunca BIGINT.
-- Correto: preserva zeros
CREATE TABLE pessoas (cpf CHAR(11) NOT NULL);
INSERT INTO pessoas (cpf) VALUES ('00100200300');
SELECT cpf FROM pessoas; -- '00100200300' ✓
-- Incorreto: perde zeros
CREATE TABLE pessoas (cpf BIGINT NOT NULL);
INSERT INTO pessoas (cpf) VALUES (00100200300);
SELECT cpf FROM pessoas; -- 100200300 ✗Se o banco já usa BIGINT, converta com LPAD:
SELECT LPAD(cpf::TEXT, 11, '0') AS cpf FROM pessoas;Veja a análise completa em CPF no banco: CHAR, VARCHAR ou BIGINT.
JavaScript
// Número perde zeros
const cpf = 00100200300; // → 100200300 (octal truncado ou decimal)
// String preserva
const cpf = "00100200300"; // → "00100200300" ✓
// Converter número para CPF com padding
function padCpf(num) {
return String(num).padStart(11, "0");
}
padCpf(100200300); // "00100200300"Regra prática: CPF é sempre string em JavaScript. Se receber como número de uma API, aplique padStart(11, "0") imediatamente.
Python
# Número perde zeros
cpf = 00100200300 # SyntaxError no Python 3 (literal octal inválido)
cpf = 100200300 # Sem zeros
# String preserva
cpf = "00100200300" # ✓
# Converter inteiro para CPF com padding
cpf_str = str(100200300).zfill(11) # "00100200300"
# f-string com padding
cpf_str = f"{100200300:011d}" # "00100200300"No Python 3, 00100200300 nem compila. O prefixo 0 é reservado para octal (0o). Isso evita o erro silencioso do JavaScript.
PHP
// Número perde zeros
$cpf = 00100200300; // → 100200300
// String preserva
$cpf = "00100200300"; // ✓
// Converter com padding
$cpf = str_pad((string) 100200300, 11, "0", STR_PAD_LEFT);
// "00100200300"
// sprintf
$cpf = sprintf("%011d", 100200300); // "00100200300"Java
// long perde zeros
long cpf = 100200300L;
// String preserva
String cpf = "00100200300"; // ✓
// Converter com padding
String cpf = String.format("%011d", 100200300L); // "00100200300"Checklist rápido
- Armazene CPF como string:
CHAR(11)no banco,stringno código - Valide o tamanho: 11 dígitos após limpar a pontuação
- Ao exportar CSV: coloque aspas ao redor do CPF
- Ao importar no Excel: defina a coluna como Texto
- Se receber como número: aplique padding (
padStart,zfill,str_pad,String.format) - Nunca armazene como BIGINT: use CHAR(11)
Para gerar CPFs com zeros à esquerda para testes, use o gerador de CPF e filtre por estado (RS = dígito 0).
Veja também: validar CPF em 9 linguagens.