quickfixfix-protocol

How to calculate CheckSum in FIX manually?


I have a FixMessage and I want to calculate the checksum manually.

8=FIX.4.2|9=49|35=5|34=1|49=ARCA|52=20150916-04:14:05.306|56=TW|10=157|

The body length here is calculated:

8=FIX.4.2|9=49|35=5|34=1|49=ARCA|52=20150916-04:14:05.306|56=TW|10=157|
0        + 0  + 5  + 5  + 8     + 25                     + 6   + 0  = 49(correct)

The checksum is 157 (10=157). How to calculate it in this case?


Solution

  • You need to sum every byte in the message up to but not including the checksum field. Then take this number modulo 256, and print it as a number of 3 characters with leading zeroes (e.g. checksum=13 would become 013).

    Link from the FIX wiki: FIX checksum

    An example implementation in C, taken from onixs.biz:

    char *GenerateCheckSum( char *buf, long bufLen )
    {
        static char tmpBuf[ 4 ];
        long idx;
        unsigned int cks;
    
        for( idx = 0L, cks = 0; idx < bufLen; cks += (unsigned int)buf[ idx++ ] );
        sprintf( tmpBuf, "%03d", (unsigned int)( cks % 256 ) );
        return( tmpBuf );   
    }