// Delphi function for Interleaved25 encoder // Copyright 2005 by MW6 Technologies Inc. All rights reserved. // // This code may not be modified or distributed unless you purchase // the license from MW6. function IT25Encode(var Src: string; var CheckDigit: Bool): string; var m: Integer; StrLen: Integer; Sum: Integer; CurrChar: Integer; EncodedMessage: AnsiString; TmpStr: AnsiString; Weight: Integer; Buf: array[0..255] of Char; begin StrLen := Length(Src); StrPCopy(Buf, Src); if (CheckDigit) then begin Sum := 0; Weight := 3; For m := 1 To StrLen do begin CurrChar := Ord(Buf[StrLen - m]) - Ord('0'); Sum := Sum + CurrChar * Weight; Weight := 4 - Weight; end; Sum := Sum Mod 10; If (Sum <> 0) Then Sum := 10 - Sum; TmpStr := Src + Chr(Sum + ord('0')); if ((Length(TmpStr) Mod 2) = 1) Then TmpStr := '0' + TmpStr; end else begin if ((StrLen Mod 2) = 1) then TmpStr := '0' + Src else TmpStr := Src; end; StrLen := Length(TmpStr); // start character (198) EncodedMessage := '' + Chr(198); m := 0; StrPCopy(Buf, TmpStr); While (m < StrLen) do begin Sum := Ord(Buf[m]) - Ord('0'); Sum := 10 * Sum + Ord(Buf[m + 1]) - Ord('0'); if (Sum < 94) Then EncodedMessage := EncodedMessage + Chr(Sum + 33) else EncodedMessage := EncodedMessage + Chr(Sum + 98); m := m + 2; end; // stop character (199) EncodedMessage := EncodedMessage + Chr(199); Result := EncodedMessage; end;