如何验证输入是否仅接受正好 12 位数字的输入?

  • 本文关键字:数字 何验证 验证 是否 java
  • 更新时间 :
  • 英文 :


我需要使用 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 位范围内。

最新更新