⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 barcode.txt

📁 VC++开源条形码代码。自动生成条形码和打印功能
💻 TXT
📖 第 1 页 / 共 5 页
字号:
		/* 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 + -