extern void IT25Encoder(char *src, bool CheckDigit, char *res); void IT25Encoder(char *src, bool CheckDigit, char *res) { DWORD Sum; WORD Weight; WORD CurrChar; WORD Index; char TmpStr[256]; WORD FinalLen; int StrLen = lstrlen(src); if (CheckDigit) { Sum = 0; Weight = 3; for(int i = 0; i < StrLen; i++) { CurrChar = src[StrLen - i - 1] - '0'; Sum = Sum + CurrChar * Weight; Weight = 4 - Weight; } Sum = Sum % 10; if (Sum != 0) Sum = 10 - Sum; if ((StrLen % 2) == 0) { lstrcpy(TmpStr, "0"); lstrcat(TmpStr, src); TmpStr[StrLen + 1] = (char)(Sum + '0'); FinalLen = StrLen + 2; } else { lstrcpy(TmpStr, src); TmpStr[StrLen] = (char)(Sum + '0'); FinalLen = StrLen + 1; } } else { if ((StrLen % 2) == 1) { lstrcpy(TmpStr, "0"); lstrcat(TmpStr, src); FinalLen = StrLen + 1; } else { lstrcpy(TmpStr, src); FinalLen = StrLen; } } // start character (198) Index = 0; res[Index++] = (char)(198); int i = 0; while (i < FinalLen) { Sum = TmpStr[i] - '0'; Sum = 10 * Sum + TmpStr[i + 1] - '0'; if (Sum < 94) res[Index++]= (char)(Sum + 33); else res[Index++]= (char)(Sum + 98); i = i + 2; } // stop character (199) res[Index++] = (char)(198); res[Index++] = '\0'; }