Code:
bool calcKey(wchar_t * name, wchar_t * serial)
{
const int keyTable[] = {11,6,17,12,12,14,5,12,16,10,11,6,14,14,4,11,6,14,14,4,11,9,12,11,10,8,10,10,16,8,4,6,10,12,16,8,10,4,16,0};
int checkSum1 = 0, checkSum2 = 0;
int i, counter;
int length = wcslen(name);
if (length < 6)
return false;
for (i = 3, counter = 0; i < length; i++, counter++)
{
checkSum1 += keyTable[counter] * name[i];
checkSum2 += keyTable[counter] * name[i] * name[i-1];
if (counter > 38)
counter = 0;
}
_swprintf(serial,L"%ld-%ld",checkSum1,checkSum2);
return true;
}