📄 barcode.txt
字号:
/* Find the CheckDigit by extracting the right-most number from weightedTotal */
sprintf(Temp,"%i",weightedTotal);
CheckDigit = asc(mid(Temp,(int)strlen(Temp), 1)) - 48;
/* Now we must encode the add-on CheckDigit into the number sets */
/* by using variable parity between character sets A and B */
if(CheckDigit == 0)
sprintf(Encoding,"BBAAA");
else if(CheckDigit == 1)
sprintf(Encoding,"BABAA");
else if(CheckDigit == 2)
sprintf(Encoding,"BAABA");
else if(CheckDigit == 3)
sprintf(Encoding,"BAAAB");
else if(CheckDigit == 4)
sprintf(Encoding,"ABBAA");
else if(CheckDigit == 5)
sprintf(Encoding,"AABBA");
else if(CheckDigit == 6)
sprintf(Encoding,"AAABB");
else if(CheckDigit == 7)
sprintf(Encoding,"ABABA");
else if(CheckDigit == 8)
sprintf(Encoding,"ABAAB");
else if(CheckDigit == 9)
sprintf(Encoding,"AABAB");
/* Now that we have the total number including the check digit, determine character to print */
/* for proper barcoding: */
DataToPrintBuffer = 0;
for(I = 1;I <= (int)strlen(EAN5AddOn);I++)
{
/* Get the value of each number. It is encoded with variable parity */
CurrentChar = asc(mid(EAN5AddOn,I,1)) - 48;
CurrentEncoding = asc(mid(Encoding, I, 1));
if(I == 1)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c%c", 32, 43);
/* Print different barcodes according to the location of the CurrentChar and CurrentEncoding */
if(CurrentEncoding == 'A')
{
if(CurrentChar == 0)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 34);
else if(CurrentChar == 1)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 35);
else if(CurrentChar == 2)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 36);
else if(CurrentChar == 3)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 37);
else if(CurrentChar == 4)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 38);
else if(CurrentChar == 5)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 44);
else if(CurrentChar == 6)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 46);
else if(CurrentChar == 7)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 47);
else if(CurrentChar == 8)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 58);
else if(CurrentChar == 9)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 59);
}
if(CurrentEncoding == 'B')
{
if(CurrentChar == 0)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 122);
else if(CurrentChar == 1)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 61);
else if(CurrentChar == 2)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 63);
else if(CurrentChar == 3)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 64);
else if(CurrentChar == 4)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 91);
else if(CurrentChar == 5)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 92);
else if(CurrentChar == 6)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 93);
else if(CurrentChar == 7)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 95);
else if(CurrentChar == 8)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 123);
else if(CurrentChar == 9)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 125);
}
/* add in the space & add-on guard pattern */
if(I==1)
{
/* Now print add-on delineators between each add-on character */
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 33);
}
else if(I == 2)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 33);
else if(I == 3)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 33);
else if(I == 4)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 33);
else if(I == 5)
{
}
}
}
/* Process 2 digit add on if it exists */
if(strlen(EAN2AddOn)==2)
{
int Tempi = atoi(mid(EAN2AddOn, 1, 2));
/* Get encoding for add on */
for(I = 0;I <= 99;I = I + 4)
{
if(Tempi == I)
sprintf(Encoding, "AA");
if(Tempi == I + 1)
sprintf(Encoding, "AB");
if(Tempi == I + 2)
sprintf(Encoding, "BA");
if(Tempi == I + 3)
sprintf(Encoding, "BB");
}
/* Now that we have the total number including the encoding */
/* determine what to print */
DataToPrintBuffer = 0;
for(I = 1;I <= (int)strlen(EAN2AddOn);I++)
{
/* Get the value of each number. It is encoded with variable parity */
if(I == 1)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, " %c", 43);
CurrentChar = asc(mid(EAN2AddOn, I, 1)) - 48;
CurrentEncoding = asc(mid(Encoding, I, 1));
/* Print different barcodes according to the location of the CurrentChar and CurrentEncoding */
if(CurrentEncoding == 'A')
{
if(CurrentChar == 0)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 34);
else if(CurrentChar == 1)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 35);
else if(CurrentChar == 2)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 36);
else if(CurrentChar == 3)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 37);
else if(CurrentChar == 4)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 38);
else if(CurrentChar == 5)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 44);
else if(CurrentChar == 6)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 46);
else if(CurrentChar == 7)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 47);
else if(CurrentChar == 8)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 58);
else if(CurrentChar == 9)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 59);
}
if(CurrentEncoding == 'B')
{
if(CurrentChar == 0)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 122);
else if(CurrentChar == 1)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 61);
else if(CurrentChar == 2)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 63);
else if(CurrentChar == 3)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 64);
else if(CurrentChar == 4)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 91);
else if(CurrentChar == 5)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 92);
else if(CurrentChar == 6)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 93);
else if(CurrentChar == 7)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 95);
else if(CurrentChar == 8)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 123);
else if(CurrentChar == 9)
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 125);
}
/* add in the space & add-on guard pattern */
if(I==1)
{
DataToPrintBuffer += sprintf(EANAddOnToPrint + DataToPrintBuffer, "%c", 33);
}
}
}
LPrintableString[512];
if(strlen(EAN2AddOn) == 2 || strlen(EAN5AddOn) == 5)
sprintf(LPrintableString, "%s%s", DataToPrint, EANAddOnToPrint);
else
sprintf(LPrintableString, "%s", DataToPrint);
iSize = (long)strlen(LPrintableString);
strncpy(output, LPrintableString, strlen(LPrintableString));
return 0;
}
/*****************************************************************/
/* ANSI C Functions for IDAutomation Barcode Fonts */
/* ?Copyright 2002- 2007, IDAutomation.com, Inc. */
/* All rights reserved. */
/* Redistribution and use of this code in source and/or binary */
/* forms, with or without modification, are permitted provided */
/* that: (1) all copies of the source code retain the above */
/* unmodified copyright notice and this entire unmodified */
/* section of text, (2) You or Your organization owns a valid */
/* Developer License to this product from IDAutomation.com */
/* and, (3) when any portion of this code is bundled in any */
/* form with an application, a valid notice must be provided */
/* within the user documentation, start-up screen or in the */
/* help-about section of the application that specifies */
/* IDAutomation.com as the provider of the Software bundled */
/* with the application. */
/*****************************************************************/
long IDAutomation_UPCa (char *DataToEncode, char *output, long iSize)
{
if(DataToEncode == NULL)
return 1;
if(strlen(DataToEncode) == 0)
return 1;
char DataToPrint[512];
char DataToEncode2[512];
char OnlyCorrectData[512];
char EAN2AddOn[512];
char EAN5AddOn[512];
char EANAddOnToPrint[512];
char Encoding[512];
char Temp[512];
static char PrintableString[512];
char CurrentChar;
char CurrentEncoding;
int Factor;
int weightedTotal;
int CheckDigit;
int Tempi;
int I;
DataToPrint[0]=(char)0;
DataToEncode2[0]=(char)0;
OnlyCorrectData[0]=(char)0;
EAN2AddOn[0]=(char)0;
EAN5AddOn[0]=(char)0;
EANAddOnToPrint[0]=(char)0;
Encoding[0]=(char)0;
Temp[0]=(char)0;
PrintableString[0]=(char)0;
sprintf(DataToEncode2,"%s",DataToEncode);
/* Check to make sure data is numeric and remove dashes, etc. */
for(I=1;I <= (int)strlen(DataToEncode2);I++)
{
/* Add all numbers to OnlyCorrectData string */
if(isdigit(asc(mid(DataToEncode2,I,1))))
{
sprintf(OnlyCorrectData,"%s%s",&OnlyCorrectData,mid(DataToEncode2,I,1));
}
}
/* Remove check digits if they added one */
if(strlen(OnlyCorrectData)==12)
{
sprintf(OnlyCorrectData,"%s",mid(OnlyCorrectData,1,11));
}
if(strlen(OnlyCorrectData)==14)
{
sprintf(OnlyCorrectData,"%s%s",mid(OnlyCorrectData,1,11),mid(OnlyCorrectData,13,2));
}
if(strlen(OnlyCorrectData)==17)
{
sprintf(OnlyCorrectData,"%s%s",mid(OnlyCorrectData,1,11),mid(OnlyCorrectData,13,5));
}
if(strlen(OnlyCorrectData)==16)
{
sprintf(EAN5AddOn,"%s",mid(OnlyCorrectData,12,5));
}
if(strlen(OnlyCorrectData)==13)
{
sprintf(EAN2AddOn,"%s",mid(OnlyCorrectData,12,2));
}
if(strlen(OnlyCorrectData) != 11 && strlen(OnlyCorrectData) != 12 && strlen(OnlyCorrectData) != 14 &&
strlen(OnlyCorrectData) != 17 && strlen(OnlyCorrectData) != 16 && strlen(OnlyCorrectData) != 13)
{
sprintf(OnlyCorrectData,"%s","00000000000");
}
/* split 12 digit number from add-on */
sprintf(DataToEncode2,"%s",mid(OnlyCorrectData,1,11));
/* <<<< Calculate Check Digit >>>> */
Factor=3;
weightedTotal=0;
for(I = (int)strlen(DataToEncode2);I >= 1;I = I + -1)
{
/* Get the value of each number starting at the end */
CurrentChar=(asc(mid(DataToEncode2,I,1)))-48;
/* multiply by the weighting factor which is 3,1,3,1... */
/* and add the sum together */
weightedTotal=weightedTotal+CurrentChar*Factor;
/* change factor for next calculation */
Factor=4-Factor;
}
/* Find the CheckDigit by finding the number + weightedTotal that = a multiple of 10 */
/* divide by 10, get the remainder and subtract from 10 */
I = (int)(weightedTotal % 10);
if(I!=0)
{
CheckDigit=(10-I);
}
else
{
CheckDigit=0;
}
sprintf(DataToEncode2,"%s%i",&DataToEncode2,CheckDigit);
/* Now that have the total number including the check digit, determine character to print */
/* for proper barcoding */
for(I=1;I <= (int)strlen(DataToEncode2);I++)
{
/* Get the ASCII value of each number */
CurrentChar=asc(mid(DataToEncode2,I,1));
/* Print different barcodes according to the location of the CurrentChar */
for(;;)
{
if(I==1)
{
/* For the first character print the human readable character, the normal */
/* guard pattern and then the barcode without the human readable character */
if((CurrentChar-48)>4)
{
sprintf(DataToPrint,"%c(%c",CurrentChar+64,CurrentChar+49);
}
if((CurrentChar-48)<5)
{
sprintf(DataToPrint,"%c(%c",CurrentChar+37,CurrentChar+49);
}
break;
}
if(I==2)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar);
break;
}
if(I==3)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar);
break;
}
if(I==4)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar);
break;
}
if(I==5)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar);
break;
}
if(I==6)
{
/* Print the center guard pattern after the 6th character */
sprintf(DataToPrint,"%s%c*",&DataToPrint,CurrentChar);
break;
}
if(I==7)
{
/* Add 27 to the ASII value of characters 6-12 to print from character set+ C */
/* this is required when printing to the right of the center guard pattern */
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar+27);
break;
}
if(I==8)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar+27);
break;
}
if(I==9)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar+27);
break;
}
if(I==10)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar+27);
break;
}
if(I==11)
{
sprintf(DataToPrint,"%s%c",&DataToPrint,CurrentChar+27);
break;
}
if(I==12)
{
/* For the last character print the barcode without the human readable character, */
/* the normal guard pattern and then the human readable character. */
if((CurrentChar-48)>4)
{
sprintf(DataToPrint,"%s%c(%c",&DataToPrint,CurrentChar+59,CurrentChar+64);
}
if((CurrentChar-48)<5)
{
sprintf(DataToPrint,"%s%c(%c",&DataToPrint,CurrentChar+59,CurrentChar+37);
}
}
break;
}
}
/* Process 5 digit add on if it exists */
if(strlen(EAN5AddOn)==5)
{
/* Get check digit for add on */
Factor=3;
weightedTotal=0;
for(I = (int)strlen(EAN5AddOn);I >= 1;I--)
{
/* Get the value of each number starting at the end */
Cur
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -