【JAVA GUI】EAN-13商品条码

这是一个Java程序,用于根据输入的12位或13位EAN-13商品代码绘制条形码。程序首先验证输入代码的长度和格式,然后计算校验码,并使用特定的编码规则将数字转换为条形码的黑白条。如果输入的校验码与计算的不匹配,程序会输出错误信息并退出。
摘要由CSDN通过智能技术生成

EAN-13商品条码

输入:前12或13位商品代码

import java.awt.*;
import java.awt.event.*;
import java.util.*;

class Paint {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String str = null;
		int flag = 1;
		while(flag!=0){
			try {
				str = in.nextLine();
				if(str.length()!=12&&str.length()!=13) str = "??????????";
				String str1 = (str.substring(6));
				Integer.parseInt(str.substring(0,6));
				Integer.parseInt(str1);
				flag = 0;
			}catch(java.lang.NumberFormatException e) {
				for(int i = 0;i < flag;i++) System.out.print("?");
				System.out.println();
				flag++;
			}
		}
		new MyPaint().loadFrame(str);
	}
}

class MyPaint extends Frame{
	int startX = 30;
	String num;
	String checkC = null;
	Color barColor = (new Color(0, 0, 0));
	Color voidColor = (new Color(255, 255, 255));
	Color backgroundColor = (new Color(76, 173, 222));
	int barLow = 70;
	int barHeight = 165;
	int longBarHeight = 180;
	int voidLow = barLow - 22;
	int voidHeight = longBarHeight + 15;
	int borderVoid = 20;
	
	
	public void loadFrame(String num) {
		this.num = num;
		if(num.length()==13) {
			this.num = num.substring(0, 12);
			this.checkC = num.substring(12);
		}
		setTitle("hw");
		setBackground(backgroundColor);
		setBounds(200, 200, 389, 225);
		setResizable(false);
		setVisible(true);
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
	
	public void paint(Graphics g) {
		ArrayList<Integer> list = new ArrayList<>();
		int index = 0;
		while(index<num.length()) {
			list.add(Integer.parseInt(num.substring(index, index+1)));
			index++;
		}
		int checkCode = this.Checkers(list);
		if(this.checkC!=null) {
			if(Integer.parseInt(checkC)!=checkCode) {
				System.out.println("error.");
				System.exit(0);
			}
		}
		list.add(checkCode);
		String sets = this.checkCode(list.get(0));
		sets = sets+"CCCCCC";
		this.startAndEnd(g,0);
		index = 0;
		int start = 1;
		while(index < list.size()-1) {
			int num = list.get(start++);
			this.modular(this.binaryCode(sets.charAt(index++), num),g);
			if(index==6) this.divide(g);
		}
		this.startAndEnd(g,1);
	}
	
	public void paintBar(int x,Graphics g) {
		this.paintVoid(x, g);
		startX -= 3;
		g.setColor(barColor);
		g.drawLine(x, barLow, x, barHeight);
		g.drawLine(x+1, barLow, x+1, barHeight);
		g.drawLine(x+2, barLow, x+2, barHeight);
		startX+=3;
	}
	
	
	
	public void paintVoid(int x,Graphics g) {
		g.setColor(voidColor);
		g.drawLine(x, voidLow, x, voidHeight);
		g.drawLine(x+1, voidLow, x+1, voidHeight);
		g.drawLine(x+2, voidLow, x+2, voidHeight);
		startX+=3;
	}
	
	public void paintLongBar(int x,Graphics g) {
		paintVoid(x, g);
		startX -= 3;
		g.setColor(barColor);
		g.drawLine(x, barLow, x, longBarHeight);
		g.drawLine(x+1, barLow, x+1, longBarHeight);
		g.drawLine(x+2, barLow, x+2, longBarHeight);
		startX+=3;
	}
	
	public void modular(int x,Graphics g) {
		String str = "" + x;
		int loc = 1;
		while(loc < str.length()) {
			if(str.charAt(loc)=='1') {
				this.paintBar(startX, g);
			}else {
				this.paintVoid(startX, g);
			}
			loc++;
		}
	}
	
	public String checkCode(int check) {
		if(check==0) return "AAAAAA";
		else if(check==1) return "AABABB";
		else if(check==2) return "AABBAB";
		else if(check==3) return "AABBBA";
		else if(check==4) return "ABAABB";
		else if(check==5) return "ABBAAB";
		else if(check==6) return "ABBBAA";
		else if(check==7) return "ABABAB";
		else if(check==8) return "ABABBA";
		else if(check==9) return "ABBABA";
		else {
			System.out.println("illegal input.");
			System.exit(0);
			return "";
		}
	}
	
	public int binaryCode(char set,int num) {
		if(set=='A') {
			if(num==0) return 10001101;
			else if(num==1) return 10011001;
			else if(num==2) return 10010011;
			else if(num==3) return 10111101;
			else if(num==4) return 10100011;
			else if(num==5) return 10110001;
			else if(num==6) return 10101111;
			else if(num==7) return 10111011;
			else if(num==8) return 10110111;
			else if(num==9) return 10001011;
			else {
				System.out.println(num);
				System.exit(0);
				return -1;
			}
		}else if(set=='B') {
			if(num==0) return 10100111;
			else if(num==1) return 10110011;
			else if(num==2) return 10011011;
			else if(num==3) return 10100001;
			else if(num==4) return 10011101;
			else if(num==5) return 10111001;
			else if(num==6) return 10000101;
			else if(num==7) return 10010001;
			else if(num==8) return 10001001;
			else if(num==9) return 10010111;
			else {
				System.out.println(num);
				System.exit(0);
				return -1;
			}
		}else {
			if(num==0) return 11110010;
			else if(num==1) return 11100110;
			else if(num==2) return 11101100;
			else if(num==3) return 11000010;
			else if(num==4) return 11011100;
			else if(num==5) return 11001110;
			else if(num==6) return 11010000;
			else if(num==7) return 11000100;
			else if(num==8) return 11001000;
			else if(num==9) return 11110100;
			else {
				System.out.println(num);
				System.exit(0);
				return -1;
			}
		}
	}
	
	public void startAndEnd(Graphics g,int flag) {
		if(flag == 0) this.borderVoid(g);
		this.paintLongBar(startX, g);
		this.paintVoid(startX, g);
		this.paintLongBar(startX, g);
		if(flag == 1) this.borderVoid(g);
	}
	
	public void divide(Graphics g) {
		this.paintVoid(startX, g);
		this.paintLongBar(startX, g);
		this.paintVoid(startX, g);
		this.paintLongBar(startX, g);
		this.paintVoid(startX, g);
	}

	
	public void borderVoid(Graphics g) {
		for(int i = 0;i < borderVoid;i++) {
			g.setColor(voidColor);
			g.drawLine(startX, voidLow, startX, voidHeight);
			startX++;
		}
	}
	
	public int Checkers(ArrayList<Integer> list) {
		int oddSum = 0;
		int evenSum = 0;
		int num = 0;
		for(int i = 1;i < list.size();i += 2) {
			evenSum += list.get(i);
		}
		for(int j = 0;j < list.size();j += 2) {
			oddSum += list.get(j);
		}
		num = oddSum+(evenSum*3);
		return 10-(num%10);
	}
	
}

示例:输入6925303781699(或输入692530378169)
输出:
在这里插入图片描述

VBA是一种用于Microsoft Office应用程序的编程语言,可以用于处理和操作Excel、Access、Word等文档和数据。而EAN-13条码(European Article Number 13)是一种全球通用的商品条码编码系统,用于唯一标识和跟踪商品。 在VBA中,可以使用一些内置的函数和方法来处理和生成EAN-13条码。下面是一个简单的示例: 首先,我们需要在Excel中创建一个单元格,用于输入要生成条码商品编号。然后,在VBA代码中,可以使用如下函数来生成EAN-13条码: ```vba Function GenerateEAN13Barcode(ByVal productCode As String) As String Dim checkDigit As Integer Dim encodedDigits As String ' 检查输入的商品编号是否为12位数字 If Not IsNumeric(productCode) Or Len(productCode) <> 12 Then GenerateEAN13Barcode = "输入的商品编号无效!" Exit Function End If ' 计算校验位 checkDigit = CalculateEAN13CheckDigit(productCode) ' 编码商品编号和校验位 encodedDigits = productCode & checkDigit GenerateEAN13Barcode = encodedDigits End Function Function CalculateEAN13CheckDigit(ByVal code As String) As Integer Dim i As Integer Dim digit As Integer Dim total As Integer ' 遍历商品编号的每一位数字 For i = 1 To 12 digit = Mid(code, i, 1) ' 偶数位数字乘以3,奇数位数字乘以1 If i Mod 2 = 0 Then total = total + digit * 3 Else total = total + digit End If Next i ' 计算校验位 CalculateEAN13CheckDigit = (10 - total Mod 10) Mod 10 End Function ``` 以上代码中,`GenerateEAN13Barcode`函数会接收一个12位的商品编号,并根据校验位计算生成13位的EAN-13条码。`CalculateEAN13CheckDigit`函数用于计算校验位。 在Excel的单元格中,可以使用VBA的`=GenerateEAN13Barcode(A1)`函数来生成EAN-13条码,其中A1为输入的商品编号单元格。执行该函数后,会在相应的单元格中显示生成的EAN-13条码。 通过以上的VBA代码,我们可以在Excel中使用VBA函数来生成EAN-13条码,方便实现商品条码的生成和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值