我需要使用 java 为类制作一个 upc 代码验证器。 upc 验证部分运行良好,但我需要一种方法只接受 12 位输入。
任何帮助将不胜感激。
谢谢! 我的代码如下所示:
public class UPC {
public static void main(String[] args) {
// get input number
Scanner Keyboard = new Scanner(System.in);
System.out.print("Enter a 12-digit barcode: "); //prompt user for input
long input = Keyboard.nextLong();
long number = input;
int d11 = (int) (number % 10);
number /= 10;
int d10 = (int) (number % 10);
number /= 10;
int d9 = (int) (number % 10);
number /= 10;
int d8 = (int) (number % 10);
number /= 10;
int d7 = (int) (number % 10);
number /= 10;
int d6 = (int) (number % 10);
number /= 10;
int d5 = (int) (number % 10);
number /= 10;
int d4 = (int) (number % 10);
number /= 10;
int d3 = (int) (number % 10);
number /= 10;
int d2 = (int) (number % 10);
number /= 10;
int d1 = (int) (number % 10);
number /= 10;
int d0 = (int) (number % 10);
int m = d1 + d3 + d5 + d7 + d9;
int n = d0 + d2 + d4 + d6 + d8 + d10;
int r = (10 - ((m + 3*n) % 10)) % 10;
System.out.println("Anatomy of Your UPC Barcode");
System.out.println("====================================");
System.out.println(" UPC: " + input);
System.out.println(" NSC: " + d0);
System.out.println(" Manufacturer Number: " + d1 + d2 + d3 + d4 + d5);
System.out.println(" Product Code: " + d6 + d7 + d8 + d9 + d10);
System.out.println(" Family Code: " + d6 + d7 + d8);
System.out.println(" Value Code: " + d9 + d10);
System.out.println(" Scanned Check Digit: " + d10);
System.out.println("Calculated Check Digit: " + d11);
if (r == d11) {
// is a upc code
System.out.println(" Validity status: valid");
}
else {
// not a upc code
System.out.println(" Validity status: invalid");
}
}
}
如注释中所述,您可以使用正则表达式(如\d{12}
)来检查数字。
请注意,您不需要附加^
前缀和$
后缀,这通常只意味着字符串的开头,$
表示字符串的结尾,因为matches()
api 会自动为您执行此操作。
示例代码:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String barcode = scan.next();
if (barcode.matches("\d{12}")) {
System.out.println("Value " + barcode + " is a valid bar code!");
}
else {
System.out.println("Invalid bar code.");
}
}
输出:
123456789000
Value 123456789000 is a valid bar code!
1234567890A
Invalid bar code.
引用:
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
boolean isOk;
do {
Scanner Keyboard = new Scanner(System.in);
System.out.print("Enter a 12-digit barcode: "); //prompt user for input
try{
long input = Keyboard.nextLong();
isOk = true;
}catch(Exception e){
//non-numeric input detected!
isOk = false;
Sy...print("Only Numbers allowed! Try again.")
}
if(isOk){
if(number<100000000000L || number >999999999999L){
//number is not 12 digits
isOk = false;
Sy...print("Must be 12 digits!! Try again.")
}else{
//number is 12 digits.
isOk = true;
}
}
}while(!isOk);
//do the rest of your codes here...
您可以尝试检查数字是否在 12 位范围内。