• 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));
        }
    }
    

      

  • 相关阅读:
    汇编中寄存器及其用处
    直接打印则需要调用PrintDocumnt.Print()方可打印,否按在对话框中点【打印】但不会有反应
    操作另一窗体的变量事件
    System.Windows.Forms.ListControl.SelectedValue.get 返回 null
    combox的selectedValue初始值注意事项
    vs2017中EF6.4无法导入到PM中,应使用EF6.2或6.1.1
    去除 Datetime的字段会自动赋默认值0001-1-1 0:00:00
    EF使用问题备忘
    EF中自定义连接字符串
    C#如何改变DataTable中的数据?
  • 原文地址:https://www.cnblogs.com/Big-Boss/p/14178724.html
Copyright © 2020-2023  润新知