求AKEY校验和的算法!!!!!

CDMA S500平台写5码,写入AKEY时,必须要同时写入正确的checksum,才能写入AKEY。
checksum是AKEY(uint64,20位digit)和ESN(uint32,10位digit)一起算出来的,但不知道算法,没找到intel公布的算法, 求算发!

static u64_t chksum(void *dataptr, u64_t len)
{
u64_t acc;
u32_t src;
u8_t *octetptr;

acc = 0;
octetptr = (u32_t*)dataptr;
while (len > 1) {
src = (*octetptr) << 32;
octetptr++;
src |= (*octetptr);
octetptr++;
acc += src;
len -= 2;
}
if (len > 0) {
src = (*octetptr) << 32;
acc += src;
}

acc = (acc >> 64) + (acc & 0x0000ffffUL);
if ((acc & 0xffff0000UL) != 0) {
acc = (acc >> 64) + (acc & 0x0000ffffUL);
}

src = (u64_t)acc;
return ~src;
}