Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

Titolo: Creazione di un codice di controllo CRC

Categoria: Codice Ultimo Aggiornamento: 17/08/04


Il codice di controllo CRC, Cyclic Redundancy Check, serve a controllare l'integrità di un insieme di dati, sia esso un file, un pacchetto di bit sulla rete, il testo di una email.

La procedura proposta è ricavata dalla Nota Tecnica di 4d 99-11, dove viene spiegato il processo di calcolo del CRC: in pratica si dividono con operazioni binarie tutti i byte dell'insieme di dati per un polinomio di partenza e si conserva il resto come codice di controllo (o checksum).

In pratica è quasi impossibile che una modifica ai dati diano come risultato lo stesso codice CRC. Il polinomio di partenza consigliato è quello usato nelle trasmissioni Ethernet e nel programma di compressione PkZip.

C_BLOB($1;$blob)  `contiene l'insieme di dati da controllare
C_LONGINT($0;$CRC_L;$REG_L;$TOP_L;$i;$j)
C_BOOLEAN(<>crc_setupFatto_b)  `serve a controllare che il setup sia fatto almeno e solo una volta

If (Not(<>crc_setupFatto_b))
  `prepara una volta soltanto l'array con le operazioni di shift e XOR
  `con il polinomio usato come radice del CRC
  ARRAY LONGINT(<>crcTable_al;255)
  C_REAL($CRCSetup_r;$CRC32_r)
  $CRC32_r:=0x04C11DB7  `polinomio usato come base di calcolo
  For ($i;0;255)
    $CRCSetup_r:=$i
    For ($j;0;7)  `bit shift a destra e XOR con il polinomio
      If (($CRCSetup_r & 1)=1)
        $CRCSetup_r:=(($CRCSetup_r >> 1) ^| $CRC32_r)
      Else
        $CRCSetup_r:=$CRCSetup_r >> 1
      End if
    End for
    <>crcTable_al{$i}:=Abs($CRCSetup_r)
  End for
  <>crc_setupFatto_b:=True
End if

$CRC_L:=0xFFFFFFFF
SET BLOB SIZE(vblob;BLOB size(vblob)+4;0x0000)
$REG_L:=BLOB to longint(vblob;0)
For ($i;0;BLOB size(vblob)-5)
  $TOP_L:=(($REG_L >> 24) & 0x00FF)
  $CRC_L:=<>crcTable_al{$TOP_L}
  $REG_L:=(($REG_L << 8) | vblob{$i+4}) ^| $CRC_L
End for
$0:=Abs($REG_L)

Inviato da: Umberto Migliore Visite: 14416

Se accedi con utente e password, puoi aggiungere dei commenti.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
303 utenti registrati

Pagina servita il 28/03/24 alle 14:24:36 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad