zoukankan      html  css  js  c++  java
  • JAVA 校验组织机构代码工具类

    /**
     * TODO
     * 组织机构代码校验工具类
     */
    public class OrganizationCodeUtil {
    
        /*
        校验规则:
            只能填写数字和字母;
            由9位数字或字母组成,第9位是校验码,其计算规则如下:
            C[9] = 11 – ( ∑( C[i] * W[i] ) mod 11 )。
            其中,C[i]表示从左至右第i个位置上的数字或字母的ASC码;
            W[i]表示第i个位置上的加权因子,其值如下:
            i 1 2 3 4 5 6 7 8
            W[i] 3 7 9 10 5 8 4 2
             当C[9]=10时,校验码用X表示;
            当C[9]=11时,校验码用0表示;
            当C[9]介于0至9之间时,校验码即用C[9]表示。
            (3)不允许000000000该特殊代码。
         */
        public static boolean organizationCodeCheck(String code) {
            // 9位、不允许000000000该特殊代码
            if (code.length() != 9 || "000000000".equals(code)) {
                return false;
            }
    
            // 只能填写数字和字母
            for (int i = 0; i < code.length(); i++) {
                char c = code.charAt(i);
                // 字母
                if (Character.isLowerCase(c) || Character.isUpperCase(c)) {
                    continue;
                }
                // 数字
                if (Character.isDigit(c)) {
                    continue;
                }
                return false;
            }
    
            boolean flag = false;
            String[] wis = {"3", "7", "9", "10", "5", "8", "4", "2"};
            int weightedVal = 0;
            for (int i = 0; i < 8; i++) {
                int ci = getIntByChar(code.charAt(i));
                int wi = Integer.parseInt(wis[i]);
                weightedVal = weightedVal + ci * wi;
            }
            int checkCode = 11 - weightedVal % 11;
            String c9 = String.valueOf(code.charAt(8));
            if (checkCode == 10) {
                if ("X".equals(c9)) {
                    flag = true;
                }
            }
            if (checkCode == 11) {
                if ("0".equals(c9)) {
                    flag = true;
                }
            }
            if (checkCode > 0 && checkCode <= 9) {
                if (String.valueOf(checkCode).equals(c9)) {
                    flag = true;
                }
            }
    
            return flag;
        }
    
        private static int getIntByChar(char val) {
            // 数字
            if (Character.isDigit(val)) {
                return Integer.parseInt(String.valueOf(val));
            }
    
            return Integer.valueOf(val);
        }
    
        public static void main(String[] args) {
            // 761569584L4016008731985289766695787X75358592081788820
            String code = "081788820";
            System.out.println(organizationCodeCheck(code));
        }
    }
    

      

  • 相关阅读:
    资源链接
    Node.js—学习
    Node.js—基本知识
    创建服务器证书命令
    解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assemb
    应用框架的设计与实现——.NET平台(10 授权服务.CodeAccessSecurityAttribute)
    .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
    MS对WCF配置中security节点的解释
    Makecert.exe(证书创建工具)
    JAVA操作Mysql数据库
  • 原文地址:https://www.cnblogs.com/Big-Boss/p/14178724.html
Copyright © 2011-2022 走看看