Outras ferramentas
Calculadora de soma de verificação CRC-16
Calculadora de verificação de redundância cíclica CRC-16 que suporta múltiplos algoritmos CRC-16
Precisa de CRC-8 ou CRC-32? Abra a calculadora CRC geral
Visao geral da ferramenta: Calculadora de soma de verificação CRC-16
CRC-16 (Verificação de redundância cíclica de 16 bits) é um algoritmo de detecção de erro amplamente utilizado, principalmente usado para verificação de integridade na transmissão e armazenamento de dados. Esta ferramenta suporta múltiplas variantes de algoritmos CRC-16 adequadas para diferentes cenários de aplicação.
O que é Calculadora de soma de verificação CRC-16?
Calculadora de soma de verificação CRC-16 codifica/decodifica conteúdo ou gera checksums para verificação.
Como usar
- Cole o conteúdo ou informe o texto.
- Escolha o modo de codificação ou hash.
- Copie o resultado gerado.
Casos de uso comuns
- Assinaturas e verificação de integridade
- Transferência segura entre sistemas
- Validação rápida durante debug
❓ Perguntas frequentes
P1: Por que o resultado está incorreto?
R: Verifique o formato de entrada e as opções, e teste o exemplo se houver.
P2: E se a entrada for muito grande?
R: Divida os dados em partes menores para obter resultados mais estáveis.
P3: Como salvo a saída?
R: Use os botões de copiar ou baixar se a ferramenta oferecer.
🔧 Algoritmos suportados
CRC-16 Standard
- Polinômio: 0x8005 (x^16 + x^15 + x^2 + 1)
- Valor inicial: 0x0000
- Aplicação: Verificação geral de dados
CRC-16 CCITT
- Polinômio: 0x1021 (x^16 + x^12 + x^5 + 1)
- Valor inicial: 0xFFFF
- Aplicação: Protocolos de comunicação, X.25, HDLC
CRC-16 Modbus
- Polinômio: 0x8005
- Valor inicial: 0xFFFF
- Aplicação: Protocolo de comunicação Modbus
CRC-16 XMODEM
- Polinômio: 0x1021
- Valor inicial: 0x0000
- Aplicação: Protocolo de transferência de arquivos XMODEM
💡 Casos de uso
1. Verificação de integridade de dados
// Verificação de integridade de transmissão de dados
class DataIntegrityChecker {
constructor() {
this.checksums = new Map();
}
// Calcular e armazenar soma de verificação CRC-16 para dados
storeChecksum(dataId, data) {
const crc16 = this.calculateCRC16(data, 'crc16');
this.checksums.set(dataId, crc16);
return crc16;
}
// Verificar integridade dos dados
verifyIntegrity(dataId, currentData) {
const originalCRC = this.checksums.get(dataId);
if (!originalCRC) {
return { valid: false, reason: 'Soma de verificação original não encontrada' };
}
const currentCRC = this.calculateCRC16(currentData, 'crc16');
const isValid = originalCRC === currentCRC;
return {
valid: isValid,
originalCRC: '0x' + originalCRC.toString(16).toUpperCase(),
currentCRC: '0x' + currentCRC.toString(16).toUpperCase(),
reason: isValid ? 'Dados intactos' : 'Os dados foram modificados'
};
}
calculateCRC16(data, algorithm) {
// Usar biblioteca CRC profissional na implementação real
return this.crcCalculate(data, algorithm);
}
}
// Exemplo de uso
const checker = new DataIntegrityChecker();
// Armazenar soma de verificação para dados originais
const originalData = "Dados comerciais importantes";
const checksum = checker.storeChecksum('data001', originalData);
console.log('Soma de verificação armazenada:', checksum);
// Verificar integridade dos dados
const currentData = "Dados comerciais importantes"; // Não modificado
const verification = checker.verifyIntegrity('data001', currentData);
console.log('Resultado da verificação de integridade:', verification);
2. Implementação de protocolo de comunicação
// Verificação CRC do protocolo de comunicação Modbus
class ModbusProtocol {
constructor() {
this.crcTable = this.generateCRCTable(0x8005);
}
// Gerar tabela de consulta CRC
generateCRCTable(polynomial) {
const table = [];
for (let i = 0; i < 256; i++) {
let crc = i;
for (let j = 0; j < 8; j++) {
if (crc & 1) {
crc = (crc >>> 1) ^ polynomial;
} else {
crc = crc >>> 1;
}
}
table[i] = crc & 0xFFFF;
}
return table;
}
// Calcular Modbus CRC-16
calculateModbusCRC(data) {
let crc = 0xFFFF;
const bytes = typeof data === 'string' ?
new TextEncoder().encode(data) : data;
for (const byte of bytes) {
const tableIndex = (crc ^ byte) & 0xFF;
crc = ((crc >>> 8) ^ this.crcTable[tableIndex]) & 0xFFFF;
}
return crc;
}
// Criar quadro de mensagem Modbus
createFrame(deviceId, functionCode, data) {
const frame = [deviceId, functionCode, ...data];
const crc = this.calculateModbusCRC(new Uint8Array(frame));
// Adicionar CRC em formato little-endian ao final do quadro
frame.push(crc & 0xFF);
frame.push((crc >>> 8) & 0xFF);
return new Uint8Array(frame);
}
// Verificar quadro de mensagem Modbus
verifyFrame(frame) {
if (frame.length < 4) {
return { valid: false, reason: 'Comprimento do quadro insuficiente' };
}
const dataLength = frame.length - 2;
const data = frame.slice(0, dataLength);
const receivedCRC = frame[dataLength] | (frame[dataLength + 1] << 8);
const calculatedCRC = this.calculateModbusCRC(data);
return {
valid: receivedCRC === calculatedCRC,
receivedCRC: '0x' + receivedCRC.toString(16).toUpperCase(),
calculatedCRC: '0x' + calculatedCRC.toString(16).toUpperCase(),
reason: receivedCRC === calculatedCRC ? 'Verificação CRC bem-sucedida' : 'Verificação CRC falhada'
};
}
}
// Exemplo de uso
const modbus = new ModbusProtocol();
// Criar quadro de solicitação de leitura de registros de retenção
const frame = modbus.createFrame(0x01, 0x03, [0x00, 0x00, 0x00, 0x02]);
console.log('Quadro Modbus:', Array.from(frame).map(b => '0x' + b.toString(16).toUpperCase()));
// Verificar quadro recebido
const verification = modbus.verifyFrame(frame);
console.log('Resultado da verificação do quadro:', verification);
🔍 Características do algoritmo
Vantagens
- Cálculo rápido: Mais rápido que algoritmos MD5, SHA
- Compatível com hardware: Fácil de implementar em hardware
- Padronizado: Múltiplos algoritmos padrão disponíveis
- Tempo real: Adequado para verificação de dados em tempo real
Limitações
- Segurança: Não adequado para segurança criptográfica
- Colisões: Dados diferentes podem ter a mesma soma de verificação
- Comprimento: Soma de verificação de 16 bits é relativamente curta
⚠️ Recomendações de uso
- Seleção de algoritmo: Escolher a variante CRC-16 apropriada com base no protocolo específico
- Otimização de desempenho: Usar tabelas de consulta para melhorar a eficiência de cálculo
- Tratamento de erros: Implementar detecção e tratamento de erros abrangentes
- Verificação de teste: Usar vetores de teste padrão para verificar a correção da implementação
📚 Referências técnicas
- ITU-T V.41: Padrão CCITT CRC-16
- Especificação Modbus: Implementação Modbus CRC-16
- RFC 1662: Uso de CRC-16 em PPP
- ISO 3309: Padrão CRC em HDLC