最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA實現社會統(tǒng)一信用代碼校驗的方法

 更新時間:2019年07月02日 09:25:58   作者:myskies  
這篇文章主要介紹了JAVA實現社會統(tǒng)一信用代碼校驗的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

網上找了幾個,寫的都不太適合,有的寫出來了,也沒有給出參考的算法鏈接。這樣就導致了如果產生錯誤我們無法排查(不懂原理怎么排查對吧)。

如果在使用過程中有疑慮,請參考:較驗規(guī)則

package com.mengyunzhi.common.utils;

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.TreeBidiMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.validation.ValidationException;
import java.util.Map;
import java.util.Random;

/**
 * 統(tǒng)一社會停用用代碼
 */
public interface UnifiedCreditCodeUtils {
  Logger logger = LoggerFactory.getLogger(UnifiedCreditCodeUtils.class);
  String baseCode = "0123456789ABCDEFGHJKLMNPQRTUWXY";
  char[] baseCodeArray = baseCode.toCharArray();
  int[] wi = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};

  /**
   * 生成供較驗使用的 Code Map
   *
   * @return BidiMap
   */
  static BidiMap<Character, Integer> generateCodes() {
    BidiMap<Character, Integer> codes = new TreeBidiMap<>();
    for (int i = 0; i < baseCode.length(); i++) {
      codes.put(baseCodeArray[i], i);
    }

    return codes;
  }

  /**
   * 較驗社會統(tǒng)一信用代碼
   *
   * @param unifiedCreditCode 統(tǒng)一社會信息代碼
   * @return 符合: true
   */
  static boolean validateUnifiedCreditCode(String unifiedCreditCode) {
    if ((unifiedCreditCode.equals("")) || unifiedCreditCode.length() != 18) {
      return false;
    }

    Map<Character, Integer> codes = generateCodes();
    int parityBit;
    try {
      parityBit = getParityBit(unifiedCreditCode, codes);
    } catch (ValidationException e) {
      return false;
    }

    return parityBit == codes.get(unifiedCreditCode.charAt(unifiedCreditCode.length() - 1));
  }

  /**
   * 獲取較驗碼
   *
   * @param unifiedCreditCode 統(tǒng)一社會信息代碼
   * @param codes       帶有映射關系的國家代碼
   * @return 獲取較驗位的值
   */
  static int getParityBit(String unifiedCreditCode, Map<Character, Integer> codes) {
    char[] businessCodeArray = unifiedCreditCode.toCharArray();

    int sum = 0;
    for (int i = 0; i < 17; i++) {
      char key = businessCodeArray[i];
      if (baseCode.indexOf(key) == -1) {
        throw new ValidationException("第" + String.valueOf(i + 1) + "位傳入了非法的字符" + key);
      }
      sum += (codes.get(key) * wi[i]);
    }
    int result = 31 - sum % 31;
    return result == 31 ? 0 : result;
  }

  /**
   * 獲取一個隨機的統(tǒng)一社會信用代碼
   *
   * @return 統(tǒng)一社會信用代碼
   */
  static String generateOneUnifiedCreditCode() {
    Random random = new Random();
    StringBuilder buf = new StringBuilder();

    for (int i = 0; i < 17; ++i) {
      int num = random.nextInt(baseCode.length() - 1);
      buf.append(baseCode.charAt(num));
    }

    String code = buf.toString();
    String upperCode = code.toUpperCase();
    BidiMap<Character, Integer> codes = generateCodes();
    int parityBit = getParityBit(upperCode, codes);

    if (codes.getKey(parityBit) == null) {
      logger.debug("生成社會統(tǒng)一信用代碼不符合規(guī)則");
      upperCode = generateOneUnifiedCreditCode();
    } else {
      upperCode = upperCode + codes.getKey(parityBit);
    }

    return upperCode;
  }
}

測試

package com.mengyunzhi.common.utils;

import org.assertj.core.api.Assertions;
import org.junit.Test;

import static org.junit.Assert.*;

public class UnifiedCreditCodeUtilsTest {

  @Test
  public void validateUnifiedCreditCode() {
    String code = "911310827965850580";
    Assertions.assertThat(UnifiedCreditCodeUtils.validateUnifiedCreditCode(code)).isTrue();
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java開發(fā)HashMap?key必須實現hashCode?equals方法原理

    Java開發(fā)HashMap?key必須實現hashCode?equals方法原理

    這篇文章主要為大家介紹了Java開發(fā)HashMap?key必須實現hashCode?equals方法原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Java語言中finally是否一定會執(zhí)行你知道嗎

    Java語言中finally是否一定會執(zhí)行你知道嗎

    這篇文章主要為大家詳細介紹了Java finally是否一定會執(zhí)行,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 詳解spring cloud hystrix 請求合并collapsing

    詳解spring cloud hystrix 請求合并collapsing

    這篇文章主要介紹了詳解spring cloud hystrix 請求合并collapsing,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • java類加載相關知識總結

    java類加載相關知識總結

    今天帶大家復習Java基礎知識,文章對Java類加載做了詳細介紹,對正在學習java的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java11 發(fā)布前抓緊掌握這些新特性

    Java11 發(fā)布前抓緊掌握這些新特性

    Java 11即將發(fā)布,你準備好了? 在這篇文章中,我們討論下在進入Java 11之前,你需要了解的Java 8、9和10的一些有用功能,若還在用Java 8以前的版本,那就太落伍了,這里首先要明確,Java 8:是一個針對傳統(tǒng)傳統(tǒng)版本的重大轉變
    2018-09-09
  • ?java簡介及環(huán)境搭建

    ?java簡介及環(huán)境搭建

    這篇文章主要介紹了java簡介及環(huán)境搭建,文章主要介紹Java的發(fā)展史及環(huán)境搭建,對正在學Java的你有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • SpringBoot項目配置postgresql數據庫完整步驟(配置多數據源)

    SpringBoot項目配置postgresql數據庫完整步驟(配置多數據源)

    PostgreSQL是一種特性非常齊全的自由軟件的對象-關系型數據庫管理系統(tǒng)(ORDBMS),下面這篇文章主要給大家介紹了關于SpringBoot項目配置postgresql數據庫(配置多數據源)的相關資料,需要的朋友可以參考下
    2023-05-05
  • SpringMVC整合websocket實現消息推送及觸發(fā)功能

    SpringMVC整合websocket實現消息推送及觸發(fā)功能

    這篇文章主要為大家詳細介紹了SpringMVC整合websocket實現消息推送及觸發(fā)功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 舉例詳解用Java實現web分頁功能的方法

    舉例詳解用Java實現web分頁功能的方法

    這篇文章主要介紹了舉例詳解用Java實現web分頁功能的方法,這種基本功能現一般通過Hibernate框架來完成,需要的朋友可以參考下
    2015-10-10
  • 基于Java內存溢出的解決方法詳解

    基于Java內存溢出的解決方法詳解

    本篇文章是對Java內存溢出的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

图片| 丰台区| 泸西县| 甘南县| 黄石市| 扎赉特旗| 澄江县| 安图县| 剑阁县| 贺兰县| 上林县| 天水市| 宁波市| 安泽县| 阿鲁科尔沁旗| 甘泉县| 贵德县| 句容市| 卢湾区| 磐石市| 临西县| 洪泽县| 杭锦后旗| 北宁市| 扬中市| 北票市| 景洪市| 古丈县| 桃园市| 运城市| 西昌市| 苍山县| 漳平市| 布尔津县| 杭锦旗| 谢通门县| 庆阳市| 万源市| 方山县| 兖州市| 寿宁县|