Just for fun...
Code:
int __cdecl CalcCode(const char *a1, int a2)
{
const char *v2; // edx@1
signed int v3; // ecx@1
signed int v4; // ebx@1
int v5; // ebp@1
int v6; // edi@1
signed int v7; // kr00_4@1
char v8; // zf@3
int v9; // ecx@5
unsigned int v10; // ecx@5
char v11; // al@5
const void *v12; // esi@5
int v13; // eax@6
char *v14; // edi@6
signed int v15; // eax@8
char *v16; // esi@8
int v17; // ecx@12
int v18; // esi@12
int v19; // ST20_4@16
char *v20; // ebp@13
signed int v21; // eax@14
char *v22; // ecx@14
int v23; // edi@14
int v24; // ecx@16
int v26; // [sp+10h] [bp-2Ch]@5
int v27; // [sp+14h] [bp-28h]@5
int v28; // [sp+18h] [bp-24h]@13
char v29; // [sp+1Ch] [bp-20h]@5
int v30; // [sp+1Dh] [bp-1Fh]@1
int v31; // [sp+21h] [bp-1Bh]@1
int v32; // [sp+25h] [bp-17h]@1
__int16 v33; // [sp+29h] [bp-13h]@1
char v34; // [sp+2Bh] [bp-11h]@1
char v35; // [sp+2Ch] [bp-10h]@1
int v36; // [sp+2Dh] [bp-Fh]@1
int v37; // [sp+31h] [bp-Bh]@1
int v38; // [sp+35h] [bp-7h]@1
__int16 v39; // [sp+39h] [bp-3h]@1
char v40; // [sp+3Bh] [bp-1h]@5
int i; // [sp+40h] [bp+4h]@6
int v42; // [sp+40h] [bp+4h]@13
v2 = a1;
v4 = 0;
v35 = 0;
v36 = 0;
v7 = strlen(a1);
v5 = v7 - 1;
v30 = 0;
v37 = 0;
v31 = 0;
v38 = 0;
v32 = 0;
v39 = 0;
v33 = 0;
v6 = (int)"391936062547802";
v34 = 0;
v3 = -1;
do
{
if ( !v3 )
break;
v8 = *(_BYTE *)v6++ == 0;
--v3;
}
while ( !v8 );
v10 = ~v3;
v40 = 0;
v29 = 0;
v11 = v10;
v12 = (const void *)(v6 - v10);
v10 >>= 2;
memcpy(&v35, v12, 4 * v10);
v27 = 0;
v26 = 0;
memcpy(&v35 + 4 * v10, (char *)v12 + 4 * v10, v11 & 3);
v9 = 0;
if ( v5 > 0 )
{
v13 = v2 - &v29;
v14 = &v34 + v5;
for ( i = v2 - &v29; ; v13 = i )
{
v16 = &v29 + v9;
v15 = *(&v29 + v9 + v13) + *v14 - 96;
if ( v15 > 10 )
v15 %= 10;
++v9;
--v14;
*v16 = v15 % 10 + 48;
if ( v9 >= v5 )
break;
}
v4 = 0;
}
v17 = a2;
v18 = 0;
if ( v7 / 2 > 0 )
{
v20 = (char *)&v28 + v5 + 3;
v27 = v7 / 2;
v42 = a2 - (_DWORD)&v30;
do
{
v23 = *(&v29 + v18);
v22 = &v29 + v18;
v21 = *v20 + v23 - 96;
if ( v21 > 10 )
v21 %= 10;
v22[v42 + 1] = v21 % 10 + 48;
v24 = v23 + v22[1];
++v18;
--v20;
v4 = v26 + v24 - 96;
v26 = v26 + v24 - 96;
v19 = v7 / 2;
}
while ( v18 < v19 );
if ( v4 > 100 )
v4 %= 100;
v17 = a2;
}
*(_BYTE *)(v27 + v17) = v4 % 10 + 48;
*(_BYTE *)(v27 + v17 + 1) = v4 / 10 + 48;
return printf("\r\nNCK=%s", v17);
}