O Gerador De CPF O Gerador De CPF

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-00

Soluçã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

  1. Armazene CPF como string: CHAR(11) no banco, string no código
  2. Valide o tamanho: 11 dígitos após limpar a pontuação
  3. Ao exportar CSV: coloque aspas ao redor do CPF
  4. Ao importar no Excel: defina a coluna como Texto
  5. Se receber como número: aplique padding (padStart, zfill, str_pad, String.format)
  6. 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.