【JAVA GUI】EAN-13商品条码

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
输出:
在这里插入图片描述

条码生成Function EAN13(BM As String ) Private BM Dimension EAN_code[10,3] EAN_code[1,1]='00000011110011' EAN_code[1,2]='00110000111111' EAN_code[1,3]='11111100001100' EAN_code[2,1]='00001111000011' EAN_code[2,2]='00111100001111' EAN_code[2,3]='11110000111100' EAN_code[3,1]='00001100001111' EAN_code[3,2]='00001111001111' EAN_code[3,3]='11110011110000' EAN_code[4,1]='00111111001100' EAN_code[4,2]='00001111110011' EAN_code[4,3]='11000000001100' EAN_code[5,1]='00110000001111' EAN_code[5,2]='00001111110011' EAN_code[5,3]='11001111110000' EAN_code[6,1]='00111100000011' EAN_code[6,2]='00111111000011' EAN_code[6,3]='11000011111100' EAN_code[7,1]='00110011111111' EAN_code[7,2]='00000011001111' EAN_code[7,3]='11001100000000' EAN_code[8,1]='00111111001111' EAN_code[8,2]='00001100000011' EAN_code[8,3]='11000000110000' EAN_code[9,1]='00111100111111' EAN_code[9,2]='00000011000011' EAN_code[9,3]='11000011000000' EAN_code[10,1]='00000011001111' EAN_code[10,2]='00001100111111' EAN_code[10,3]='11111100110000' Dimension EAN_left[10] EAN_left[1]='111111' EAN_left[2]='112122' EAN_left[3]='112212' EAN_left[4]='112221' EAN_left[5]='121122' EAN_left[6]='122112' EAN_left[7]='122211' EAN_left[8]='121212' EAN_left[9]='121221' EAN_left[10]='122121' Dimension EAN_mode[8] Store '' To EAN_mode If Len(Alltrim(BM))12 .And. Val(BM)>0 Messagebox('EAN-13编码长度不规范',268,'信息提示') Return '' Else EAN_mode[1]='000000000000000000' EAN_mode[2]='110011' For i=0 To 9 If Val(Substr(BM,1,1))=i For ii=1 To 6 BMZ=Val(Substr(BM,ii+1,1)) MODE=Val(Substr(EAN_left[i+1],ii,1)) EAN_mode[3]=EAN_mode[3]+EAN_code[BMZ+1,MODE] Endf Endi Endf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值