/**
* 校验发票号码
* 2019年3月27日14:02:56
* @param invoiceNo 获取pdf定义的发票信息,即发票号
*/
public boolean checkoutInvoiceNo(String invoiceNo) {
//定义一个检测发票成功与否的标志位
boolean checkResult = true;
// 将发票号码字符串去掉所有空格
invoiceNo = replaceBlank(invoiceNo);
// 将发票号码中的所有横杠转化为英字横线
invoiceNo = line(invoiceNo);
// 全角字符->半角字符
invoiceNo = BCConvertUtils.qj2bj(invoiceNo);
// 发票号码只能以数字、英字逗号、英字横线
String regex="^([-,0-9]+)$";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(invoiceNo);
// 与正则表达式不匹配时
if(!m.matches()){
// 记录校验不通过
checkResult = false;
} else {
// 先以","来分割字符串
String[] pdfInvoiceArr = invoiceNo.split(",");
for (int k = 0; k < pdfInvoiceArr.length; k++) {
// 判断是否包含"-"
if (pdfInvoiceArr[k].contains("-")) {
// 包含"-"时,再以"-"来分割字符串
String[] invoiceNoLine = pdfInvoiceArr[k].split("-");
if (invoiceNoLine.length > 1) {
int numberOne = 0;
int numberEnd = 0;
// 将含有"-"的发票号顺番
// 发票号码长度不为8时格式不正确
if (!(invoiceNoLine[0].length() == 8 && (8 == invoiceNoLine[1].length()))) {
// 数据校验不通过
checkResult = false;
break;
} else {
numberOne = Integer.parseInt(invoiceNoLine[0]);
numberEnd = Integer.parseInt(invoiceNoLine[1]);
// '-'两边的数据,前值大于后值时,格式错误
if (numberOne > numberEnd) {
checkResult = false;
break;
} else {
String stringOne = String.valueOf(invoiceNoLine[0]).substring(0, 3);
String stringEnd = String.valueOf(invoiceNoLine[1]).substring(0, 3);
// '-'两边的数据,前三位数字不一致时,格式错误
if (!stringOne.equals(stringEnd)) {
checkResult = false;
break;
}
}
}
}
} else {
// 不包含"-"时,发票号码长度不为8时格式不正确
if (pdfInvoiceArr[k].length() != 8) {
checkResult = false;
break;
}
}
}
}
return checkResult;
}