je ne sais pas si cela intéressera quelqu'un mais je poste ici un code vba pour calculer le crc d'un binaire en fonction d un polynôme donné en binaire lui aussi

nous avons d un coté notre binaire ( ex : 1001001101)
et le polynôme de contrôle (ex : g(x)=x^5+x^3+x^2+1)

on traduit le polynome en binaire en fonction des puissances

101101 (=> 1.x^5 ; 0.x^4 ; 1.x^3 ; 1.x^2 ; 0.x^1 ; 1.x^0)


création du crc

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Function crc(nbr As String, polynome As String) As String
Dim check As String
Dim traitement As String
Dim traiter As String
check = nbr
For i = 1 To Len(polynome) - 1
nbr = nbr & 0
Next
 
 
 
Do While Len(nbr) > Len(polynome)
     Do While Left(nbr, 1) = 0
     nbr = Right(nbr, Len(nbr) - 1)
     Loop
 
    traitement = Left(nbr, Len(polynome))
    nbr = Right(nbr, Len(nbr) - Len(polynome))
    traiter = ""
 
    For j = 1 To Len(polynome)
        traiter = traiter & (Mid(traitement, j, 1) Xor Mid(polynome, j, 1))
    Next
 
        nbr = traiter & nbr
 
Loop
crc = check & Right(nbr, Len(polynome) - 1)
End Function

et ensuite la fonction verifcrc qui vérifie le binaire et son crc concaténer avec le même polynôme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Function verifcrc(nbr As String, polynome As String) As String
 
Dim traitement As String
Dim traiter As String
 
 
 
Do While Len(nbr) > Len(polynome)
     Do While Left(nbr, 1) = 0
     nbr = Right(nbr, Len(nbr) - 1)
     Loop
 
    traitement = Left(nbr, Len(polynome))
    nbr = Right(nbr, Len(nbr) - Len(polynome))
    traiter = ""
 
    For j = 1 To Len(polynome)
        traiter = traiter & (Mid(traitement, j, 1) Xor Mid(polynome, j, 1))
    Next
 
        nbr = traiter & nbr
 
Loop
verifcrc = Right(nbr, Len(polynome) - 1)
traiter = ""
For j = 1 To Len(polynome) - 1
traiter = traiter & 0
Next
If verifcrc = traiter Then
verifcrc = "valide"
Else
verifcrc = "corrompu"
End If
 
 
End Function