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)
输出: