JAVA生成统一社会信用代码和组织机构代码
统一社会信用代码规则如下:
代码如下:
引入jar包下载:https://mvnrepository.com/artifact/cn.hutool/hutool-all/5.8.3
package com.xxx;import cn.hutool.core.lang.PatternPool;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;public class CreditCodeUtil {public static final Pattern CREDIT_CODE_PATTERN = PatternPool.CREDIT_CODE;private static final int[] WEIGHT = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};private static final char[] BASE_CODE_ARRAY = "0123456789ABCDEFGHJKLMNPQRTUWXY".toCharArray();private static final Map<Character, Integer> CODE_INDEX_MAP;static {CODE_INDEX_MAP = new ConcurrentHashMap<>();for (int i = 0; i < BASE_CODE_ARRAY.length; i++) {CODE_INDEX_MAP.put(BASE_CODE_ARRAY[i], i);}}/*** 正则校验统一社会信用代码(18位)** <pre>* 第一部分:登记管理部门代码1位 (数字或大写英文字母)* 第二部分:机构类别代码1位 (数字或大写英文字母)* 第三部分:登记管理机关行政区划码6位 (数字)* 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母)* 第五部分:校验码1位 (数字或大写英文字母)* </pre>** @param creditCode 统一社会信用代码* @return 校验结果*/public static boolean isCreditCodeSimple(CharSequence creditCode) {if (StrUtil.isBlank(creditCode)) {return false;}return ReUtil.isMatch(CREDIT_CODE_PATTERN, creditCode);}/*** 是否是有效的统一社会信用代码* <pre>* 第一部分:登记管理部门代码1位 (数字或大写英文字母)* 第二部分:机构类别代码1位 (数字或大写英文字母)* 第三部分:登记管理机关行政区划码6位 (数字)* 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母)* 第五部分:校验码1位 (数字或大写英文字母)* </pre>** @param creditCode 统一社会信用代码* @return 校验结果*/public static boolean isCreditCode(CharSequence creditCode) {if (false == isCreditCodeSimple(creditCode)) {return false;}final int parityBit = getParityBit(creditCode);if (parityBit < 0) {return false;}return creditCode.charAt(17) == BASE_CODE_ARRAY[parityBit];}/*** 获取一个随机的统一社会信用代码** @return 统一社会信用代码*/public static String randomCreditCode() {final StringBuilder buf = new StringBuilder(18);//for (int i = 0; i < 2; i++) {int num = RandomUtil.randomInt(BASE_CODE_ARRAY.length - 1);buf.append(Character.toUpperCase(BASE_CODE_ARRAY[num]));}for (int i = 2; i < 8; i++) {int num = RandomUtil.randomInt(10);buf.append(BASE_CODE_ARRAY[num]);}for (int i = 8; i < 17; i++) {int num = RandomUtil.randomInt(BASE_CODE_ARRAY.length - 1);buf.append(BASE_CODE_ARRAY[num]);}final String code = buf.toString();return code + BASE_CODE_ARRAY[getParityBit(code)];}/*** 获取校验码** @param creditCode 统一社会信息代码* @return 获取较验位的值*/private static int getParityBit(CharSequence creditCode) {int sum = 0;Integer codeIndex;for (int i = 0; i < 17; i++) {codeIndex = CODE_INDEX_MAP.get(creditCode.charAt(i));if (null == codeIndex) {return -1;}sum += codeIndex * WEIGHT[i];}final int result = 31 - sum % 31;return result == 31 ? 0 : result;}public static void main(String[] args) {for (int i = 0; i < 50; i++) {String res = randomCreditCode();System.out.println("统一社会信用代码:"+res+" 组织机构代码:"+res.substring(8,17));}}
}
效果图:
JAVA生成统一社会信用代码和组织机构代码相关推荐
- Python通过前16位生成统一社会信用代码
# -*- coding: utf-8 -*- # 统一社会信用代码中不使用I,O,Z,S,V SOCIAL_CREDIT_CHECK_CODE_DICT = {'0': 0, '1': 1, '2' ...
- Python随机生成企业及统一社会信用代码
import random import string# 随机生成企业名称 def generate_company_name():prefix = ['ABC', 'XYZ', 'ACME', 'B ...
- 组织机构代码和统一社会信用代码校验规则以及java校验工具类
组织机构代码 编码规则编辑 1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成. 本体代码采用系列(即分区段)顺序编码方法. 校验码按照以下公式计算: C9 ...
- python结合正则表达式及校验码生成算法校验:电话号码、营业执照、组织机构代码证、税务登记证、统一社会信用代码证、非盈利性企业登记证号码的函数
#!/usr/bin/env python3 import re from datetime import datetimedef check_phone(phone):'''三大运营商和虚拟运营商的 ...
- 全国组织机构统一社会信用代码校验 - Java 版
主要是网上错误的代码太多,为了避免大家踩坑,特此更正,详细规则如下: GB 32100-2015 法人和其他组织统一社会信用代码编码规则 private static final String BAS ...
- hive自定义函数实现组织机构代码、统一社会信用代码校验
一.根据中华人民共和国国家标准全国组织机构代码(9位)编制规则实现规则校验 1.组织机构代码编码规则 1.1组织机构代码的组成 全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉 ...
- java、正则表达式、php校验“统一社会信用代码”
java import java.util.HashMap; import java.util.Map; /** * Desc: 社会信用代码证 检验 * Created 2016/5/18. */ ...
- JAVA 身份证校验与统一社会信用代码校验
B话少说,上代码 原理默认大家都懂了,不懂的话可以百度一下 package com.microlinktech.rns.util;import lombok.Getter; import lombok ...
- JAVA、PHP统一社会信用代码、身份证号算法解析验证
JAVA.PHP统一社会信用代码.身份证号算法解析验证 这是给某机关单位写系统的时候要验证统一社会信用代码用的是PHP写的方法 java的话也是同理有时间我再把java代码贴出来,这就先贴PHP JA ...
最新文章
- 可见的轮廓线用虚线绘制_为什么你用SketchUp没有别人“快”?
- shell中常用系统变量和条件判断
- JavaScript Set Homepage and Favorite
- 在STM32价格疯长下,哪些国产32可以替代?
- linux c 内存elf,gcc加入linux ELF有什么功能?
- codeforces 266B-C语言解题报告
- java restful文件传输_java中使用restful web service来传输文件
- ThreadLocal 在web环境下使用的边界问题
- idea插件sonar安装使用教程
- jsp 运用 session 登录输出
- android 8.0 无法接受到静态广播
- 男生追女生时的21个致命问题
- 网易互娱2017实习生招聘在线笔试(三)
- 2022-2028年中国眼镜制造行业市场竞争策略及未来发展潜力报告
- qt 从布局中删除子控件
- 很猛很疯狂,北京楼市促销十年少见 房价下跌论渐占上风
- 什么是redis?redis如何使用?
- go开源项目整理-新手篇_一周的前5篇文章:您正在从事什么开源项目?
- PDF文件怎么转Word?分享两种转换小技巧
- 计算智能学习1_感知机原理_水果生熟分类器_matlab实现
热门文章
- php理财游戏源码,PHP理财 复利 分红 拆分经营养成类游戏源码
- grouping_idgrouping sets
- 贴片元件的封装中名字后缀的 L N M的含义
- 山东企业办理ISO三体系认证有什么重要意义
- Hblock盘活企业级存储市场
- 魔兽世界服务器文件,Blizzard暴雪《魔兽世界》服务器异常替换文件For Win-32(2014年9月9日发布) 其他 暴雪...
- 通过OneDrive下载Google Photos里的照片
- Centos开发环境配置
- USB、Type-C、HDMI接口了解
- 输入一个字符串,内有数字和非数字字符,例如: A123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]……