W3docs

crc32()

A função crc32() calcula um checksum de redundância cíclica de uma string e retorna um inteiro de 32 bits.

A função PHP crc32() calcula o CRC-32 (Verificação de Redundância Cíclica) de uma string e o retorna como um inteiro de 32 bits. O CRC-32 é um checksum rápido e leve: transforma qualquer string em uma impressão digital curta, permitindo detectar se os dados foram alterados (corrupção acidental durante um download, erro de disco, bit invertido). É uma ferramenta de detecção, não de segurança — veja as notas abaixo.

Esta página aborda a sintaxe, a armadilha signed/unsigned que confunde a maioria das pessoas, um exemplo executável, uma verificação de integridade realista e quando usar um hash de verdade.

Syntax

crc32(string $string): int

Recebe um único parâmetro — a $string a ser analisada — e retorna o checksum CRC-32 como um inteiro.

A armadilha signed vs. unsigned

O CRC-32 é conceitualmente um valor de 32 bits sem sinal (0 a 4.294.967.295). Em plataformas de 64 bits, o PHP o retorna como um inteiro positivo normal. Em plataformas de 32 bits, valores acima de 2.147.483.647 ficam negativos devido ao overflow. Para obter o mesmo valor sem sinal em qualquer plataforma, formate com %u:

$unsigned = sprintf('%u', crc32($str)); // always positive, as a string

Basic example

php— editable, runs on the server

Passamos a string para crc32() e a envolvemos com sprintf('%u', ...) para que o resultado seja consistente em todas as plataformas. A saída deste código é:

3964322768

Muitas ferramentas (e o mundo do cksum/zip) exibem valores CRC em hexadecimal. Para isso, formate com %08X para obter uma string hexadecimal de 8 dígitos com zeros à esquerda:

<?php
echo sprintf('%08X', crc32("Hello, World!")); // EC4AC3D0
?>

Verifying data integrity

O uso real do CRC-32 é detectar mudanças. Você calcula e armazena um checksum uma vez, depois o recalcula e compara — se os dois diferirem, os dados foram alterados. Aqui está um exemplo autocontido que armazena um checksum e depois valida uma cópia contra ele:

<?php
$data = "important payload";

// Compute and store the checksum once (e.g. in a manifest or database).
$expected_crc = crc32($data);

// Later, recompute it for the data you received and compare.
$received = "important payload";
$actual_crc = crc32($received);

if ($actual_crc === $expected_crc) {
    echo "OK: data is intact.";
} else {
    echo "FAIL: data has changed.";
}
?>

Isso imprime OK: data is intact.. Para verificar um arquivo real, substitua a string por crc32(file_get_contents($filename)). Use a comparação estrita === para que o PHP compare tanto o valor quanto o tipo — e se o checksum esperado chegar como uma string hexadecimal de uma fonte externa, converta-a primeiro com (int) hexdec($expected_crc).

Important notes

  • Não é criptograficamente seguro. O CRC-32 é trivial de falsificar — um atacante pode criar dados diferentes com o mesmo checksum. Use-o apenas para detecção de erros acidentais, nunca para senhas, assinaturas ou proteção contra adulterações.
  • Colisões acontecem. Com apenas ~4,3 bilhões de valores possíveis, duas strings diferentes podem ter o mesmo checksum. Isso é aceitável para detectar corrupção, mas não para identificar dados de forma única.
  • Para segurança ou endereçamento de conteúdo, use um hash de verdade. Recorra a md5(), sha1() ou ao moderno hash() (ex.: SHA-256) — e md5_file() / sha1_file() para arquivos.

Summary

crc32() é uma forma rápida de criar uma impressão digital de uma string para detecção de erros acidentais — verificando downloads, identificando registros corrompidos ou fazendo verificações de sanidade de dados em trânsito. Lembre-se de normalizar o resultado com sprintf('%u', ...) para consistência entre plataformas, e escolha um hash criptográfico sempre que a segurança for importante.

Practice

Prática
Qual é a função de crc32() em PHP?
Qual é a função de crc32() em PHP?
Was this page helpful?