/*********************************************************************/
/* */
/* Morovia C# Functions, part of Morovia Font Tools V3.0 */
/* (c)2000-2004 Morovia Corporation. All rights reserved. */
/* Visit http://www.morovia.com/font/ for more information. */
/* */
/* You may incorporate this source code in your application as long */
/* as you own a perpetual license to the font product. */
/* Distributing the source code, as well as its derivatives, require */
/* a developer license. */
/* Please refer to the license agreement for details. */
/* Last update: April 2005 */
/*********************************************************************/
using System;
namespace MoroviaFontTools
{
///
/// Summary description for MoroviaFontTools.
///
public class FontTools
{
const int MAX_LEN = 256;
string szOutput;
public FontTools()
{
//
// TODO: Add constructor logic here
//
}
private bool IsNumeric(string Instr)
{
int idx1 = 0;
int strLen = Instr.Length;
char[] InChar = Instr.ToCharArray();
bool Result = true;
if(strLen > 0)
{
for(idx1=0;idx1 < strLen;idx1++)
{
if(Char.IsNumber(InChar[idx1]) == false)
Result=false;
}
}
else
{
Result = false;
}
return Result;
}
private string SpecialChar(string szInpara)
{ string test;
int i, nLen;
int nTemp;
string szTemp = "";
nLen = szInpara.Length;
for (i=0; i= 0)
szBuffer+=szInpara[i];
i = i + 1;
}
return "*"+szBuffer+"*";
}
/*--------------------------Code39Mod43---------------------------------------*/
/*Converts the input text into a Code39 extended symbol. This function */
/*should be used to format Morovia code39 font, not Code39 full ASCII font.*/
/*The text can be any combinations of ASCII characters. Note that the symbol */
/*generated is an extended Code39, and the scanner must be put in Code39 */
/*extended mode to read the symbol properly.*/
/*----------------------------------------------------------------------------*/
public string Code39Mod43(string szInpara)
{
int i = 0, nPos, nCheckSum = 0;
string inPara="";
string szBuffer = "";
string szSwap = "";
string szCharSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
string szMappingSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.=$/+%";
i = 0;
inPara=szInpara;
while (i=0)
{
szBuffer+= szMappingSet[nPos];
nCheckSum = nCheckSum + nPos;
}
i = i + 1;
}
nCheckSum = nCheckSum % 43;
szSwap='*'+szBuffer+szMappingSet[nCheckSum]+'*';
return szSwap;
}
/*--------------------------------Code39Ascii----------------------------------------------*/
/*Converts the input text into a Code39 extended symbol. This function should be */
/*used to format Morovia code39 font, not Code39 full ASCII font. The text can be*/
/*any combinations of ASCII characters. Note that the symbol generated is an extended*/
/*Code39, and the scanner must be put in Code39 extended mode to read the symbol properly.*/
/*-----------------------------------------------------------------------------------------*/
public string Code39Ascii(string szInpara)
{
int i=0, nPos;
string szBuffer = "";
string szSpecial = "";
string szWap="";
szSpecial=SpecialChar(szInpara);
szInpara = szSpecial;
string szCharSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. "+(char)240;
string szMappingSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.="+(char)240;
while (i=0)
szBuffer+=szMappingSet[nPos];
else if (szInpara[i] == 0 )
szBuffer+= "%U";
else if (szInpara[i] == ' ') //control characters
szBuffer+= '=';
else if (szInpara[i] == '/')
szBuffer+= "/O";
else if (szInpara[i] == ':')
szBuffer+="/Z";
else if (szInpara[i] == 64 )
szBuffer+="%V";
else if (szInpara[i] == 96)
szBuffer+= "%W";
else if ( szInpara[i] >0 && szInpara[i] <= 26)
{
szBuffer+='$';
szBuffer+= (char)(szInpara[i]+'A'-1);
}
else if (szInpara[i]>32 && szInpara[i]<=46)
{
szBuffer+= '/';
szBuffer+=(char)((szInpara[i] % 32)+'A'-1);
}
else if (szInpara[i]>=97 && szInpara[i]<=122)
{
szBuffer+= '+';
szBuffer+=(char)((szInpara[i]%32)+'A'-1);
}
else if (szInpara[i] >= 27 && szInpara[i] <= 31)
{
szBuffer+= '%';
szBuffer+=(char)( szInpara[i]-27+'A');
}
else if (szInpara[i] >= 59 && szInpara[i] <= 63 )
{
szBuffer+= '%';
szBuffer+=(char)( szInpara[i] - 59 + 'F');
}
else if (szInpara[i] >= 91 && szInpara[i] <= 95 )
{
szBuffer+= '%';
szBuffer+=(char)( szInpara[i] - 91 + 'K');
}
else if (szInpara[i] >= 123 && szInpara[i] <= 127)
{
szBuffer+= '%';
szBuffer+=(char)(szInpara[i] - 123 + 'P');
}
i = i + 1;
}
//replace NULL char
i=0;
while (i 0 && ch <= 0x1F )
szOutPut+=(char)(0xC0+ch);
else if(ch==' ') //space is mapped to equal sign
szOutPut+='=';
else if(ch=='*')
szOutPut+=(char)0xF4;
else if(ch=='=')
szOutPut+=(char)0xF0;
else if(ch=='[')
szOutPut+=(char)0xF1;
else if(ch==']')
szOutPut+=(char)0xF2;
else if(ch==0x7F)
szOutPut+=(char)0xE0;
else
szOutPut+=ch;
}
szOutPut='['+szOutPut+']';
return szOutPut;
}
/*--------------------------------Code93-----------------------------------------------*/
/*Converts the input text into a Code93 symbol. It accepts any ASCII character input,*/
/*taking care of the check character calculation and adding start/stop characters into*/
/*the string.*/
/*------------------------------------------------------------------------------------*/
public string Code93(string szInpara)
{
int i=0, nPos, nStrLen;
string szBuffer = "";
int nWeightC, nWeightK;
int nCheckSumC, nCheckSumK;
char cCheckDigitC, cCheckDigitK;
string szCharSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%@#^&";
string szMappingSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.=$/+%@#^&";
string szSpecial = "";
szSpecial= SpecialChar(szInpara);
szInpara = szSpecial;
while (i=0)
szBuffer+=szMappingSet[nPos];
else if (szInpara[i] == 240 )
szBuffer+="#U";
else if (szInpara[i] == ' ') //control characters
szBuffer+= '=';
else if (szInpara[i] == '/')
szBuffer+= "^O";
else if (szInpara[i] == ':')
szBuffer+= "^Z";
else if (szInpara[i] == 64 )
szBuffer+= "#V";
else if (szInpara[i] == 96)
szBuffer+= "#W";
else if ( szInpara[i] >0 && szInpara[i] <= 26)
{
szBuffer+= '@';
szBuffer+= (char)(szInpara[i]+'A'-1);
}
else if (szInpara[i]>32 && szInpara[i]<=46)
{
szBuffer+= '^';
szBuffer+=(char)((szInpara[i] % 32)+'A'-1);
}
else if (szInpara[i]>=97 && szInpara[i]<=122)
{
szBuffer+= '&';
szBuffer+=(char) (szInpara[i]%32+'A'-1);
}
else if (szInpara[i] >= 27 && szInpara[i] <= 31)
{
szBuffer+= '#';
szBuffer+=(char)( szInpara[i]-27+'A');
}
else if (szInpara[i] >= 59 && szInpara[i] <= 63 )
{
szBuffer+= '#';
szBuffer+=(char)( szInpara[i] - 59 + 'F');
}
else if (szInpara[i] >= 91 && szInpara[i] <= 95 )
{
szBuffer+= '#';
szBuffer+=(char)( szInpara[i] - 91 + 'K');
}
else if (szInpara[i] >= 123 && szInpara[i] <= 127)
{
szBuffer+= '#';
szBuffer+=(char)( szInpara[i] - 123 + 'P');
}
i = i + 1;
}
i = 0;
nStrLen = szBuffer.Length;
nCheckSumC = 0;
while (i= 0 && nDigit <= 9)
return (char)(192+nDigit);
return (char)0;
}
private char convertSetAText(char cChar)
{
int i;
string szCode = "0123456789";
string szDecode = "0123456789";
i = szCode.IndexOf( cChar);
if (i>=0)
return szDecode[i];
return (char)0;
}
private char convertSetANoText(char cChar)
{
int i;
string szCode = "1234567890";
string szDecode = "!@#$%^&*()";
i = szCode.IndexOf(cChar);
if (i>=0)
return szDecode[i];
return(char)0;
}
private char convertSetBText(char cChar)
{
int i;
string szCode = "1234567890";
string szDecode = "qwertyuiop";
i = szCode.IndexOf(cChar);
if (i>=0)
return szDecode[i];
return(char)0;
}
private char convertSetBNoText(char cChar)
{
int i;
string szCode = "1234567890";
string szDecode = "QWERTYUIOP";
i = szCode.IndexOf(cChar);
if (i>=0)
return szDecode[i];
return(char)0;
}
private char convertSetCText(char cChar)
{
int i;
string szCode = "1234567890";
string szDecode = "asdfghjkl;";
i = szCode.IndexOf(cChar);
if (i>=0)
return szDecode[i];
return (char)0;
}
private char convertSetCNoText(char cChar)
{
int i;
string szCode = "1234567890";
string szDecode = "ASDFGHJKL:";
i = szCode.IndexOf(cChar);
if (i>=0)
return szDecode[i];
return(char)0;
}
private string Parity5(int nDigit)
{
string pParity="";
switch (nDigit)
{
case 0:
pParity= "00111";
break;
case 1:
pParity= "01011";
break;
case 2:
pParity= "01101";
break;
case 3:
pParity= "01110";
break;
case 4:
pParity= "10011";
break;
case 5:
pParity= "11001";
break;
case 6:
pParity= "11100";
break;
case 7:
pParity= "10101";
break;
case 8:
pParity= "10110";
break;
case 9:
pParity= "11010";
break;
}
return pParity;
}
private char LefthandEncoding(int nDigit, int nParity)
{
switch (nDigit)
{
case 0:
if (nParity == 1)
return '/';
else if (nParity == 0)
return '?';
break;
case 1:
if (nParity == 1)
return 'z';
else if (nParity == 0)
return 'Z';
break;
case 2:
if (nParity == 1)
return 'x';
else if (nParity == 0)
return 'X';
break;
case 3:
if (nParity == 1)
return 'c';
else if (nParity == 0)
return 'C';
break;
case 4:
if (nParity == 1)
return 'v';
else if (nParity == 0)
return 'V';
break;
case 5:
if (nParity == 1)
return 'b';
else if (nParity == 0)
return 'B';
break;
case 6:
if (nParity == 1)
return 'n';
else if (nParity == 0)
return 'N';
break;
case 7:
if (nParity == 1)
return 'm';
else if (nParity == 0)
return 'M';
break;
case 8:
if (nParity == 1)
return ',';
else if (nParity == 0)
return '<';
break;
case 9:
if (nParity == 1)
return '.';
else if (nParity == 0)
return '>';
break;
}
return (char)0;
}
private string UPC5SUPP(string szInpara)
{
int i=0, nCheckSum = 0;
string szBuffer = "";
string szParity = "";
nCheckSum = 3*(szInpara[0]-'0') + 9*(szInpara[1]-'0')+3*(szInpara[2]-'0')+9*(szInpara[3]-'0')+3*(szInpara[4]-'0');
szParity = Parity5(nCheckSum % 10);
szBuffer+= '{';
for (i=0; i<5; i++)
{
szBuffer+= LefthandEncoding(szInpara[i]-'0', szParity[i]-'0');
if (i < 4)
szBuffer+= '\\';
}
return szBuffer;
}
private string UPC2SUPP(string szInpara)
{
int i=0;
string szBuffer = "";
int nNum = 0;
int nParity1=0, nParity2=0;
while (i='0' && szInpara[i] <= '9')
szBuffer+= szInpara[i];
i = i + 1;
}
nStrLen = szBuffer.Length;
if (nStrLen == 0)
szSwap = "";
else if (nStrLen == 1)
{
szBuffer+= '0';
szSwap=UPC2SUPP(szBuffer);
}
else if (nStrLen == 2)
szSwap=UPC2SUPP(szBuffer);
else if (nStrLen == 3)
{
szBuffer+= "00";
szSwap=UPC5SUPP(szBuffer);
}
else if (nStrLen == 4)
{
szBuffer+= "0";
szSwap=UPC5SUPP(szBuffer);
}
else if (nStrLen == 5)
szSwap=UPC5SUPP(szBuffer);
else if (nStrLen>5)
{
szBuffer =szBuffer.Substring(0,5);
szSwap=UPC5SUPP(szBuffer);
}
return szSwap;
}
/*------------------------------------------EAN13-----------------------------------------*/
/*Converts the input text into an EAN barcode. Accepts input of 12 digits of numeric data.*/
/*----------------------------------------------------------------------------------------*/
public string EAN13(string szInpara)
{
int i, nStrlen, nCharPos;
string szBuffer = "";
string szSwap = "", szTemp = "", szSUPP = "";
string szParity = "";
char cCheckDigit;
string pszSupplement="";
nStrlen = szInpara.Length;
for (i=0; i='0' && szInpara[i]<='9' || szInpara[i] == '|')
szTemp+= szInpara[i];
}
nCharPos = szTemp.IndexOf( '|');
if (nCharPos >= 0)
{
pszSupplement = szTemp.Substring(nCharPos+1,szTemp.Length-nCharPos-1);
szSUPP= UPC25SUPP(pszSupplement);
szTemp=szTemp.Substring(0,nCharPos);
}
nStrlen = szTemp.Length;
if (nStrlen>12)
szTemp=szTemp.Substring(0,12);
else if (nStrlen<12)
{
while (nStrlen<12)
{
szTemp+= '0';
nStrlen++;
}
}
switch (szTemp[0])
{
case '0':
szParity = "AAAAAA";
break;
case '1':
szParity = "AABABB";
break;
case '2':
szParity = "AABBAB";
break;
case '3':
szParity = "AABBBA";
break;
case '4':
szParity = "ABAABB";
break;
case '5':
szParity = "ABBAAB";
break;
case '6':
szParity = "ABBBAA";
break;
case '7':
szParity = "ABABAB";
break;
case '8':
szParity = "ABABBA";
break;
case '9':
szParity = "ABBABA";
break;
}
for (i=1; i<7;i++)
{
if (szParity[i-1]=='A')
szBuffer+= convertSetAText(szTemp[i]);
else if (szParity[i-1]=='B')
szBuffer+= convertSetBText(szTemp[i]);
}
szBuffer+= '|';
for (i=7; i<12; i++)
szBuffer+= convertSetCText(szTemp[i]);
cCheckDigit = getUPCCheck(szTemp);
szSwap+= textonly(szTemp[0]);
szSwap+= '[';
szSwap+= szBuffer;
szSwap+= convertSetCText(cCheckDigit);
szSwap+= ']';
if (szSUPP != "")
{
szSwap+= ' ';
szSwap+=szSUPP;
}
return szSwap;
}
/*--------------------------------------EAN8----------------------------------------------*/
/*Converts the input text into an EAN-8 barcode. Accepts input of 7 digits of numeric data.*/
/*----------------------------------------------------------------------------------------*/
public string EAN8(string szInpara)
{
int i, nStrlen, nCharPos;
string szBuffer = "";
string szSwap = "", szTemp = "", szSUPP = "";
char cCheckDigit;
string pszSupplement;
nStrlen = szInpara.Length;
for (i=0; i='0' && szInpara[i]<='9' || szInpara[i] == '|')
szTemp+= szInpara[i];
}
nCharPos = szTemp.IndexOf( '|');
if (nCharPos >= 0)
{
pszSupplement = szTemp.Substring(nCharPos+1,szTemp.Length-nCharPos-1);
szSUPP=UPC25SUPP(pszSupplement);
szTemp=szTemp.Substring(0,nCharPos);
}
nStrlen = szTemp.Length;
if (nStrlen>7)
szTemp =szTemp.Substring(0,7);
else if (nStrlen<7)
{
while (nStrlen<7)
{
szTemp+= '0';
nStrlen++;
}
}
for (i=0; i<4;i++)
szBuffer+= convertSetAText(szTemp[i]);
szBuffer+= '|';
for (i=4; i<7; i++)
szBuffer+= convertSetCText(szTemp[i]);
cCheckDigit = getUPCCheck(szTemp);
szSwap+= '[';
szSwap+= szBuffer;
szSwap+= convertSetCText(cCheckDigit);
szSwap+= ']';
if (szSUPP != "")
{
szSwap+= ' ';
szSwap+= szSUPP;
}
return szSwap;
}
/*-------------------------------------UPC_A----------------------------------------------*/
/*Converts the input text into a UPC-A barcode. Accepts input of 11 digits of numeric data.*/
/*----------------------------------------------------------------------------------------*/
public string UPC_A(string szInpara)
{
int i, nStrlen, nCharPos;
string szBuffer = "";
string szSwap = "", szTemp = "", szSUPP = "";
char cCheckDigit;
string pszSupplement;
nStrlen = szInpara.Length;
for (i=0; i='0' && szInpara[i]<='9' || szInpara[i] == '|')
szTemp+= szInpara[i];
}
nCharPos = szTemp.IndexOf( '|');
if (nCharPos >= 0)
{
pszSupplement = szTemp.Substring(nCharPos+1,szTemp.Length-nCharPos-1);
szSUPP= UPC25SUPP(pszSupplement);
szTemp=szTemp.Substring(0,nCharPos);
}
nStrlen = szTemp.Length;
if (nStrlen>11)
szTemp=szTemp.Substring(0,11);
else if (nStrlen<11)
{
while (nStrlen<11)
{
szTemp+= '0';
nStrlen++;
}
}
for (i=1; i<6;i++)
szBuffer+= convertSetAText(szTemp[i]);
szBuffer+= '|';
for (i=6; i<11; i++)
szBuffer+= convertSetCText(szTemp[i]);
cCheckDigit = getUPCCheck(szTemp);
szSwap=""+textonly(szTemp[0]);
szSwap+= '[';
szSwap+= convertSetANoText(szTemp[0]);
szSwap+= szBuffer;
szSwap+= convertSetCNoText(cCheckDigit);
szSwap+= ']';
szSwap+=textonly(cCheckDigit);
if (szSUPP != "")
{
szSwap+= ' ';
szSwap+= szSUPP;
}
return szSwap;
}
private string upce2upca(string szInpara)
{
string szBuffer = "";
if (szInpara[0] != '0' || szInpara.Length != 7)
return "";
switch (szInpara[6])
{
case '0':
case '1':
case '2':
szBuffer+=szInpara[0]+szInpara[1]+szInpara[2]+szInpara[6]+"0000"+szInpara[3]+szInpara[4]+szInpara[5];
break;
case '3':
if (szInpara[3] == '0' || szInpara[3] == '1' || szInpara[3] == '2')
return "";
szBuffer+=szInpara[0]+szInpara[1]+szInpara[2]+szInpara[3]+"00000"+szInpara[4]+szInpara[5];
break;
case '4':
szBuffer+=szInpara[0]+szInpara[1]+szInpara[2]+szInpara[3]+szInpara[4]+"00000"+szInpara[5];
break;
case '5':
case '6':
case '7':
case '8':
case '9':
szBuffer+=szInpara[0]+szInpara[1]+szInpara[2]+szInpara[3]+szInpara[4]+szInpara[5]+"0000"+szInpara[6];
break;
}
return szBuffer;
}
/*------------------------------------UPC_E-----------------------------------------------*/
/*Converts the input text into a UPC-E barcode. Accepts input of 6 digits of numeric data.*/
/*----------------------------------------------------------------------------------------*/
public string UPC_E(string szInpara)
{
int i, nStrlen, nCharPos;
string szBuffer = "";
string szSwap = "", szTemp = "", szSUPP = "";
string szParity = "";
char cCheckDigit;
string pszSupplement;
nStrlen = szInpara.Length;
for (i=0; i='0' && szInpara[i]<='9' || szInpara[i] == '|')
szTemp+= szInpara[i];
}
nCharPos = szTemp.IndexOf( '|');
if (nCharPos >= 0)
{
pszSupplement = szTemp.Substring(nCharPos+1,szTemp.Length-nCharPos-1);
szSUPP= UPC25SUPP(pszSupplement);
szTemp=szTemp.Substring(0,nCharPos);
}
nStrlen = szTemp.Length;
if (nStrlen>6)
szTemp=szTemp.Substring(0,6);
else if (nStrlen<6)
{
while (nStrlen<6)
{
szTemp+= '0';
nStrlen++;
}
}
szTemp= '0'+szTemp;
szSwap=upce2upca(szTemp);
cCheckDigit = getUPCCheck(szSwap);
switch (cCheckDigit)
{
case '0':
szParity= "BBBAAA";
break;
case '1':
szParity= "BBABAA";
break;
case '2':
szParity= "BBAABA";
break;
case '3':
szParity ="BBAAAB";
break;
case '4':
szParity= "BABBAA";
break;
case '5':
szParity = "BAABBA";
break;
case '6':
szParity = "BAAABB";
break;
case '7':
szParity = "BABABA";
break;
case '8':
szParity= "BABAAB";
break;
case '9':
szParity= "BAABAB";
break;
}
for (i=1; i<7;i++)
{
if (szParity[i-1]=='A')
szBuffer+= convertSetAText(szTemp[i]);
else if (szParity[i-1]=='B')
szBuffer+= convertSetBText(szTemp[i]);
}
szSwap = "";
szSwap+= textonly('0');
szSwap+= '[';
szSwap+= szBuffer;
szSwap+= '\'';
szSwap+=textonly(cCheckDigit);
if (szSUPP != "")
{
szSwap+= ' ';
szSwap+= szSUPP;
}
return szSwap;
}
/*------------------------------------------Codabar---------------------------------------*/
/*Converts the input into a valid Codabar symbol. The default start/stop characters are “A”*/
/*and “B”.*/
/*----------------------------------------------------------------------------------------*/
public string Codabar(string szInpara)
{
int i=0, nPos;
string szBuffer = "A";
string szCharSet = "0123456789-$:/.+";
while (i=0)
szBuffer+= szInpara[i];
i = i + 1;
}
szBuffer+= 'B';
return szBuffer;
}
/*--------------------------------------Code25--------------------------------------------*/
/*Converts the input into a valid Code25 symbol. No check character appended.*/
/*----------------------------------------------------------------------------------------*/
public string Code25(string szInpara)
{
int i=0, nPos;
string szBuffer = "[";
string szCharSet = "0123456789";
while (i=0)
szBuffer+=szInpara[i];
i = i + 1;
}
szBuffer+= ']';
return szBuffer;
}
/*----------------------------------Code25Check-------------------------------------------*/
/*Converts the input into a valid Code25 symbol. Append a check digit.*/
/*----------------------------------------------------------------------------------------*/
public string Code25Check(string szInpara)
{
int i=0, nCheckSum = 0, nStrLen;
string szBuffer = "";
string szSwap = "";
char cCheckDigit;
while (i='0' && szInpara[i]<='9')
szBuffer+=szInpara[i];
i = i + 1;
}
i = 0;
nStrLen = szBuffer.Length;
while (i-1)
{
for (i=0; i=0)
szBuffer+= szLeft[i];
i = i + 1;
}
nStrlen = szBuffer.Length;
if (nStrlen>10)
szBuffer=szBuffer.Substring(0,10);
else if (nStrlen<10)
{
while (nStrlen<10)
{
szBuffer+= '0';
nStrlen++;
}
}
szSwap= "978";
for (i=0; i <9; i++)
szSwap+=szBuffer[i];
szBuffer = "";
szBuffer= EAN13(szSwap);
szSwap = "";
if (nCharPos>-1)
{
szSwap+= ' ';
szSwap+=UPC25SUPP(szRight);
}
return szBuffer+szSwap;
}
/*-------------------------------------------Code11---------------------------------------*/
/*Converts the input into a valid Code11 symbol. Check digit as well start/stop characters*/
/*are added into the input.*/
/*----------------------------------------------------------------------------------------*/
public string Code11(string szInpara)
{
int i=0, nPos, nCheckSumC = 0, nCheckSumK = 0, nStrLen;
string szBuffer = "";
string szSwap = "";
char cCheckDigitC, cCheckDigitK;
string szCharSet = "0123456789-";
while (i=0)
szBuffer+= szInpara[i];
i = i + 1;
}
nStrLen = szBuffer.Length;
for (i=0; i=0)
nCheckSumC = nCheckSumC + ((i+1) % 10)*nPos;
}
nCheckSumC = nCheckSumC % 11;
cCheckDigitC = szCharSet[nCheckSumC];
szBuffer+= cCheckDigitC;
nStrLen = szBuffer.Length;
if (nStrLen>11)
{
i = 0;
while (i=0)
nCheckSumK = nCheckSumK + ((i+1)%9)*nPos;
i = i + 1;
}
nCheckSumK = nCheckSumK % 11;
cCheckDigitK = szCharSet[nCheckSumK];
szBuffer+= cCheckDigitK;
}
szSwap+= '[';
szSwap+= szBuffer;
szSwap+= ']';
return szSwap;
}
/*--------------------------------------MSIMod10------------------------------------------*/
/*Converts the input into a valid MSI/Plessey symbol. Check digit is calculated based on */
/*Modulo 10 algorithm.*/
/*----------------------------------------------------------------------------------------*/
public string MSIMod10(string szInpara)
{
int i=0, nCheckSum = 0, nStrLen;
string szBuffer = "";
string szSwap = "";
string szNewNo = "";
char cCheckDigit;
int nChoice, nNewNo = 0;
while (i='0' && szInpara[i]<='9')
szBuffer+= szInpara[i];
i = i + 1;
}
i = 0;
nStrLen = szBuffer.Length;
nChoice = nStrLen % 2;
while (i0)
{
szNewNo=(char)((nNewNo % 10)+'0')+szNewNo;
nNewNo = nNewNo / 10;
i = i + 1;
}
i=0;
while (i= 0)
szBuffer+= szInpara[i];
i = i + 1;
}
nCheckSum = 103;
i = 0;
while (i=0)
{
szSwap+= szMappingSet[nPos];
nCheckSum = nCheckSum + (i+1) * nPos;
}
i = i + 1;
}
nCheckSum = nCheckSum % 103;
cCheckDigit = szMappingSet[nCheckSum];
szBuffer = "";
szBuffer+= (char)200;
szBuffer+= szSwap;
szBuffer+= cCheckDigit;
szBuffer+= (char)203;
szBuffer+= (char)205;
return szBuffer;
}
/*----------------------------------------Code128B----------------------------------------*/
/*Accepts the input of character set B. Code128 character set consist of all printable */
/*character s in the ASCII table.*/
/*----------------------------------------------------------------------------------------*/
public string Code128B(string szInpara)
{
int i=0, nPos, nCheckSum = 0;
string szBuffer = "";
string szSwap = "";
char cCheckDigit;
string szCharSet = "", szMappingSet = "\0";
szCharSet=code128bCharSet();
szMappingSet=code128MappingSet();
while (i= 0)
szBuffer+= szInpara[i];
i = i + 1;
}
nCheckSum = 104;
i = 0;
while (i=0)
{
szSwap+= szMappingSet[nPos];
nCheckSum = nCheckSum + (i+1) * nPos;
}
i = i + 1;
}
nCheckSum = nCheckSum % 103;
cCheckDigit = szMappingSet[nCheckSum];
szBuffer = "";
szBuffer+= (char)201;
szBuffer+=szSwap;
szBuffer+= cCheckDigit;
szBuffer+= (char)203;
szBuffer+= (char)205;
return szBuffer;
}
/*-------------------------------------------Code128C-------------------------------------*/
/*Code128 character set C only contains numeric characters. Used when the encoded data */
/*containing only numbers.*/
/*----------------------------------------------------------------------------------------*/
public string Code128C(string szInpara)
{
int i=0, nPos, nStrLen, nCheckSum = 0;
string szBuffer = "";
string szSwap = "";
string szTemp = "";
char cCheckDigit;
string szCharSet = "", szMappingSet = "";
szCharSet=code128cCharSet();
szMappingSet=code128MappingSet();
while (i= 0)
szBuffer+= szInpara[i];
i = i + 1;
}
nCheckSum = 105;
nStrLen = szBuffer.Length;
if (nStrLen % 2 == 1)
szTemp+= '0';
szTemp+=szBuffer;
i = 0;
while (i < nStrLen)
{
nPos = 10 * (szTemp[i] - '0') + szTemp[i+1] - '0';
if (nPos>=0)
szSwap+= szMappingSet[nPos];
i = i + 2;
}
i = 0;
while (i=33 && szSwap[i]<127)
nCheckSum = nCheckSum + (i+1)*(szSwap[i]-32);
else if (szSwap[i] >= 192)
nCheckSum = nCheckSum + (i+1)*(szSwap[i]-97);
i = i + 1;
}
nCheckSum = nCheckSum % 103;
cCheckDigit = szMappingSet[nCheckSum];
szBuffer = "";
szBuffer+= (char)202;
szBuffer+= szSwap;
szBuffer+= cCheckDigit;
szBuffer+= (char)203;
szBuffer+= (char)205;
return szBuffer;
}
/*------------------------------------------Code128Auto-----------------------------------*/
/*Encode any ASCII characters. It automatically shift to another character set when the */
/*encoded character is not found in the current character set.*/
/*----------------------------------------------------------------------------------------*/
public string Code128Auto(string szInpara)
{
int i=0, nPos, nStrLen, nCheckSum = 0;
string szBuffer = "";
string szSwap = "";
char cCheckDigit;
string szCharASet = "", szCharBSet = "", szCharCSet = "", szMappingSet = "";
int nValue, nWeight;
string pCurCharSet="";
string szSpecial = "";
szSpecial= SpecialChar(szInpara);
szInpara = szSpecial;
szCharASet=code128aCharSet();
szCharBSet=code128bCharSet();
szCharCSet=code128cCharSet();
szMappingSet=code128MappingSet();
nStrLen = szInpara.Length;
if (szInpara[0] <= 31) pCurCharSet = szCharASet;
if (szInpara[0] >= 32 && szInpara[0] <= 126) pCurCharSet = szCharBSet;
if (nStrLen > 4)
{
i = 0;
while (i<4)
{
if (szInpara[0] < '0' || szInpara[0] > '9')
break;
i = i + 1;
}
if (i == 4)
pCurCharSet = szCharCSet;
}
if (pCurCharSet == szCharASet)
szBuffer+=(char)200;
else if (pCurCharSet == szCharBSet)
szBuffer+= (char)201;
else if (pCurCharSet == szCharCSet)
szBuffer+= (char)202;
i = 0;
while (i 32 && szInpara[i] < 96)))
{
if (pCurCharSet != szCharASet)
{
szBuffer+= (char)198;
pCurCharSet = szCharASet;
}
nPos = pCurCharSet.IndexOf(szInpara[i]);
if (nPos>=0)
szBuffer+= szMappingSet[nPos];
}
else if ( i < nStrLen && szInpara[i] > 31 && szInpara[i] < 127 )
{
if (pCurCharSet != szCharBSet)
{
szBuffer+= (char)197;
pCurCharSet = szCharBSet;
}
nPos = pCurCharSet.IndexOf(szInpara[i]);
if (nPos>=0)
szBuffer+= szMappingSet[nPos];
}
i = i + 1;
}
i = 0;
nValue = 0;
while (i= 33 && szBuffer[i] <= 126 )
nValue = szBuffer[i] - 32;
else if (szBuffer[i] >= 192)
nValue = szBuffer[i] - 97;
if (i > 1)
nWeight = i;
else
nWeight = 1;
nCheckSum = nCheckSum + nValue * nWeight;
i = i + 1;
}
nCheckSum = nCheckSum % 103;
cCheckDigit = szMappingSet[nCheckSum];
szSwap+=szBuffer;
szSwap+= cCheckDigit;
szSwap+= (char)203;
szSwap+= (char)205;
return szSwap;
}
/*---------------------------------------USPS_EAN128--------------------------------------*/
/*Used for 22 digit USPS special services labels such as delivery confirmation in EAN128. */
/*This function takes 19 digit input which is made up of the three parts: 2 digit service */
/*code, 9 digit customer ID and 8 digit sequential package ID. This function calculates the*/
/*check digit (Mod10), add the application identifier 91 as required by the USPS standard,*/
/*and format the data with EAN128 standard. */
/*----------------------------------------------------------------------------------------*/
public string USPS_EAN128(string szInpara)
{
int i=0, nLen, charVal = 0, checkSum = 0, weight = 0;
string szTemp = "", szEAN128 = "";
char checkDigit;
while (i= 19)
{
for (i=0; i<19; i++)
szEAN128+= szTemp[i];
}
else if (nLen < 19)
szEAN128= "0000000000000000000";
szEAN128= "91"+szEAN128;
nLen = szEAN128.Length;
if (nLen != 21)
{
return "";
}
for (i=0; i='0' && ch <= '9' )
temp_str+=ch;
}
if ( temp_str.Length % 2 == 1)
{
temp_str+='0';
}
///////////////////////////////
szITF25+=(char)202;
for(i=0; i=0 && value3 <= 93 )
szITF25+=(char)( '!' + value3);
else
szITF25+=(char)(value3-94+196);
}
szITF25+= (char)203;
return szITF25;
}
/*---------------------------------------------ITF25Check---------------------------------*/
/*Converts the input into a valid interleaved 2 of 5 barcode. No check digit appended in */
/*this function.*/
/*----------------------------------------------------------------------------------------*/
public string ITF25Check(string input)
{
string temp_str="", szITF25 = "";
int i;
char ch; int value1, value2, value3;
int check_sum;
char check_digit;
//filter no-numeric string
for(i=0; i='0' && ch <= '9' )
temp_str+=ch;
}
if ( temp_str.Length % 2 == 0)
{
temp_str+='0';
}
//calc the check sum
check_sum=0;
for(i=0; i=0 && value3 <= 93 )
szITF25+=(char)( '!' + value3);
else
szITF25+= (char)(value3-94+196);
}
szITF25+= (char)203;
return szITF25;
}
/*---------------------------------Postnet--------------------------------*/
/*Converts the input into a valid POSTNET barcode string with checksum.*/
/*The function adds the start/stop frame bar, calculating the check digit*/
/*and forms the correct symbol. This function can also be used to generate*/
/*PLANET barcode string.*/
/*-----------------------------------------------------------------------*/
public string Postnet(string szInpara)
{
int i, nLen, nCheckSum=0;
string szTemp = "", szBuffer = "";
nLen = szInpara.Length;
//filter
for (i=0; i=0 && nLen<5)
{
while (szBuffer.Length<5)
szBuffer+= '0';
}
else if (nLen>5 && nLen<9)
{
while (szBuffer.Length<9)
szBuffer+= '0';
}
else if (nLen>9 && nLen<13)
{
while (szBuffer.Length<13)
szBuffer+= '0';
}
else if (nLen>13)
szBuffer=szBuffer.Substring(0,13);
nLen = szBuffer.Length;
for (i=0; i= 0)
{
szTemp+= szInpara[i];
if (szInpara[i] < 65)
nCharVal = szInpara[i] - 48;
else
nCharVal = szInpara[i] - 55;
nTemp = nCharVal / 6;
if (nTemp >= 5)
nCheckSum = 0;
else
nCheckSum = nTemp + 1;
ntu = ntu + nCheckSum;
nTemp = nCharVal - nTemp * 6;
if (nTemp >= 5)
nCheckSum = 0;
else
nCheckSum = nTemp + 1;
ntl = ntl + nCheckSum;
}
}
ntu = ntu % 6;
if (ntu == 0) ntu = 6;
ntl = ntl % 6;
if (ntl == 0) ntl = 6;
nCheckSum = (ntu - 1) * 6 + ntl - 1;
szTemp= '['+szTemp;
if (nCheckSum < 10)
szTemp+=(char)(nCheckSum+48);
else
szTemp+=(char)(nCheckSum+55);
szTemp+= ']';
return szTemp;
}
/*--------------------------------Telepen-------------------------------------*/
/*Converts the input into a Telepen barcode string. The function accepts any */
/*ASCII character input, taking care of the check digit calculation and adding*/
/*start/stop characters.*/
/*----------------------------------------------------------------------------*/
public string Telepen(string szInpara)
{
int i=0, nCheckSum = 0;
string szBuffer = "";
string szSwap = "";
string szSpecial = "";
char cCheckDigit;
szSpecial= SpecialChar(szInpara);
szInpara = szSpecial;
while (i=0 && szInpara[i]<=127)
{
szBuffer+= szInpara[i];
nCheckSum = nCheckSum + szInpara[i];
}
i = i + 1;
}
cCheckDigit = (char)(127 - (nCheckSum % 127));
szBuffer+=cCheckDigit;
i = 0;
while (i=0 && szBuffer[i]<= 31)
szSwap+=(char)(szBuffer[i]+192);
else if (szBuffer[i] == 127)
szSwap+=(char)224;
else
szSwap+=szBuffer[i];
i = i + 1;
}
szSwap= '['+szSwap+']';
return szSwap;
}
/*-------------------------------------TelepenNumeric-------------------------*/
/*Converts the input into a Telepen Numeric barcode string. This functions */
/*accepts numeric input only.*/
/*----------------------------------------------------------------------------*/
public string TelepenNumeric(string szInpara)
{
int i=0, nTemp, nStrLen, nCheckSum = 0;
string szBuffer = "";
string szSwap = "";
char cCheckDigit;
// filter numeric character
while (i='0' && szInpara[i]<='9')
szBuffer+=szInpara[i];
i = i + 1;
}
nStrLen = szBuffer.Length;
if (nStrLen % 2 == 1) szBuffer+= '0';
i = 0;
while (i=0)
szSwap+=(char) nTemp;
i = i + 2;
}
i = 0;
while (i=0 && szSwap[i]<= 31)
szBuffer+=(char)(szSwap[i]+192);
else if (szSwap[i] == 127)
szBuffer+=(char)224;
else
szBuffer+=szSwap[i];
i = i + 1;
}
szBuffer= '['+szBuffer+']';
return szBuffer;
}
}
}