|
@@ -888,7 +888,12 @@ public class PatentStarApiService {
|
|
|
//遍历初始集合
|
|
|
for (String str : originalList) {
|
|
|
if (str.startsWith("CN")) {
|
|
|
- cnStrings.add(str);
|
|
|
+ if (str.length() == 12 && str.contains(".")) {
|
|
|
+ String cnNumber = this.formatCnNumber(str);
|
|
|
+ cnStrings.add(cnNumber);
|
|
|
+ } else {
|
|
|
+ cnStrings.add(str);
|
|
|
+ }
|
|
|
cnCount++;
|
|
|
if (cnCount >= 100) {
|
|
|
cnStrings = new ArrayList<>();
|
|
@@ -931,6 +936,50 @@ public class PatentStarApiService {
|
|
|
return patentStarListDTOS;
|
|
|
}
|
|
|
|
|
|
+ public String formatCnNumber(String str) {
|
|
|
+ StringBuilder builder = new StringBuilder();
|
|
|
+ builder.append(str, 0, 2);
|
|
|
+ String sub = str.substring(2, 3);
|
|
|
+ if (sub.equals("9")) {
|
|
|
+ builder.append("19");
|
|
|
+ } else if (sub.equals("0")) {
|
|
|
+ builder.append("20");
|
|
|
+ }
|
|
|
+ builder.append(str, 2, 5);
|
|
|
+ builder.append("00");
|
|
|
+ builder.append(str, 5, str.indexOf("."));
|
|
|
+ String s = builder.toString();
|
|
|
+ String s1 = s.substring(2);
|
|
|
+ char c = this.calculateChecksum(s1);
|
|
|
+ builder.append(".").append(c);
|
|
|
+ return builder.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public char calculateChecksum(String input) {
|
|
|
+ int sum = 0;
|
|
|
+ int[] weights = {2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5};
|
|
|
+
|
|
|
+ // 遍历字符串中的每个字符,并计算乘积之和
|
|
|
+ for (int i = 0; i < input.length(); i++) {
|
|
|
+ char digit = input.charAt(i);
|
|
|
+ int num = Character.getNumericValue(digit);
|
|
|
+ sum += num * weights[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算总和除以11的余数
|
|
|
+ int remainder = sum % 11;
|
|
|
+
|
|
|
+ // 根据余数确定校验位
|
|
|
+ char checksum;
|
|
|
+ if (remainder < 10) {
|
|
|
+ checksum = (char) ('0' + remainder);
|
|
|
+ } else {
|
|
|
+ checksum = 'X';
|
|
|
+ }
|
|
|
+
|
|
|
+ return checksum;
|
|
|
+ }
|
|
|
+
|
|
|
public StarPatentVO getPatentByNo(String patentNo) {
|
|
|
StarPatentVO starPatentVO = null;
|
|
|
String condition = "AN=(" + patentNo + ") OR PN=(" + patentNo + ") OR GN=(" + patentNo + ") OR ANO=(" + patentNo + ")";
|