/*********************************************************************/ /* */ /* 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; } } }