Hello,
J'ai le même souci, le CRC donné en exemple ne me donne pas la même valeur avec la chaine d'entrée
Code PHP
function crc64($string)
{
    $poly = (0xC96C5795 << 32) | 0xD7870F42;
    $crc = 0;
    for($i=0;$i<strlen($string);$i++)
    {
        $byte = ord($string[$i]);
        for($bit=0;$bit<8;$bit++,$byte>>=1)
        {
            $crc = (($crc>>1)& ~(1<<63)) ^ ((($crc^$byte)&1)?$poly:0);
        }
    }
    return $crc;
}
Code C
unsigned long long int crc64( const char* s )
{
    unsigned long long int poly = 0xc96c5795d7870f42ULL;//(0xC96C5795ULL << 32) | 0xD7870F42ULL;
    unsigned long long int crc  = 0;
    for ( size_t i=0 ; i< strlen(s) ; i++ )
    {
        unsigned long long int byte = s[i];
        for ( size_t bit=0 ; bit<8 ; bit++, byte>>=1 )
            crc = ((crc>>1) & 0x7fffffffffffffffULL) ^ ( ((crc^byte)&1)?poly:0 );
    }
    return crc;
}
int main()
{
    printf("\n CRC = %016llx", crc64("161a653b38"));
    return 0;
}
Néanmoins la fonction C me retourne CRC = 0x46c4478f73cd3b20 au lieu de 0x181c307118953949.
Comprends pas 
