栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java代码验证社会统一信用代码规则

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java代码验证社会统一信用代码规则

先上代码

package com.lj;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;

//import plugin.template.TemplateStepMeta;


public class UnifiedCodeValidator {

	//正则校验     如果想要不区分大小写,就在最后一个数组中加入 abcsefghjklmnpqrtuwxy
	private static final String REGEX = "[1-9NY]{1}[1-9]{1}[1-6]{1}[0-9]{5}[0123456789ABCDEFGHJKLMNPQRTUWXY]{10}";

	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 String BASE_CODE_STRING = "0123456789ABCDEFGHJKLMNPQRTUWXY";

	private static final char[] BASE_CODE_ARRAY = BASE_CODE_STRING.toCharArray();

	private static final List BASE_CODES = new ArrayList<>();

	
	private static final List REGIST_CODE = Arrays.asList(
		"11", "12", "13", "19",
		"21", "29",
		"31", "32", "33", "34", "35", "39",
		"41", "49",
		"51", "52", "53", "59",
		"61", "62", "69",
		"71", "72", "79",
		"81", "89",
		"91", "92", "93",
		"A1", "A9",
		"N1", "N2", "N3", "N9",
		"Y1"
	);

	
	private static final List PROVINCE_REGION_CODE = Arrays.asList(
		"11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "45", "46",
		"50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91"
	);

	static {
		for (char c : BASE_CODE_ARRAY) {
			BASE_CODES.add(c);
		}
	}

	
	public boolean CodeValidate( String value) {
		if (StringUtils.isEmpty(value)) {
			return true;
		}
		// 长度验证
		if (value.length() != 18) {
			return false;
		}
		// 登记管理部门+机构类别代码验证
		if (!REGIST_CODE.contains(value.substring(0, 2))) {
			return false;
		}
		// 省级行政区划代码验证
		if (!PROVINCE_REGION_CODE.contains(value.substring(2, 4))) {
			return false;
		}
		// 正则初验
		if (!Pattern.matches(REGEX, value)) {
			return false;
		}

		// 效验码校验
		char[] businessCodeArray = value.toCharArray();
//		char  check= businessCodeArray[17];
		String check = Character.toString(businessCodeArray[17]);
		int sum = 0;
		for (int i = 0; i < 17; i++) {
			char key = businessCodeArray[i];
			sum += (BASE_CODES.indexOf(key) * WEIGHT[i]);
		}
		int checkCode = 31 - sum % 31;
		String s = Character.toString(BASE_CODE_ARRAY[checkCode % 31]);
		//对比时将两个字符转为字符串,不区分大小写对比最后一位
		return s.equalsIgnoreCase(check);
	}
}

信用代码编码规则如下:

【统一社会信用代码=登记管理部门代码+机构类别代码+登记管理机关行政区划码+主体标识码(组织机构代码)+校验码】

第一部分(第1位):登记管理部门代码,使用阿拉伯数字或英文字母表示。例如,机构编制、民政、工商三个登记管理部门分别使用1、2、3表示,其他登记管理部门可使用相应阿拉伯数字或英文字母表示。

第二部分(第2位):机构类别代码,使用阿拉伯数字或英文字母表示。登记管理部门根据管理职能,确定在本部门登记的机构类别编码。例如,机构编制部门可用1表示机关单位,2表示事业单位,3表示由中央编办直接管理机构编制的群众团体;民政部门可用1表示社会团体,2表示民办非企业单位,3表示基金会;工商部门可用1表示企业,2表示个体工商户,3表示农民专业合作社。

第三部分(第3—8位):登记管理机关行政区划码,使用阿拉伯数字表示。例如,国家用100000,北京用110000,注册登记时由系统自动生成,体现法人和其他组织注册登记及其登记管理机关所在地,既满足登记管理部门按地区管理需求,也便于社会对注册登记主体所在区域进行识别。(参照《中华人民共和国行政区划代码》[GB/T 2260—2007])

第四部分(第9—17位):主体标识码(组织机构代码),使用阿拉伯数字或英文字母表示。(参照《全国组织机构代码编制规则》[GB 11714—1997])

第五部分(第18位):校验码,使用阿拉伯数字或英文字母表示。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880631.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号