您的位置:首页 > 编程语言

校验组织机构代码 合法性

2014-04-21 17:57 585 查看
组织机构代码验证规则:

 

组织机构代码是每一个机关、社会团体、企事业单位在全国范围内唯一的、始终不变的法定代码标识。 

最新使用的组织机构代码在1997年颁布实施,由8位数字(或大写拉丁字母)本体代码和1位数字(或大写拉丁字母)校验码组成。本体代码采用系列(即分区段)顺序编码方法。校验码按下列公式计算: 



C9 = 11 - MOD ( ∑Ci * Wi ,11) … (2) 

i=1 

其中:MOD —— 表示求余函数; 

i —— 表示代码字符从左到右位置序号; 

Ci —— 表示第i位置上的代码字符的值,采用附录A“代码字符集”所列字符; 

C9 —— 表示校验码; 

Wi —— 表示第i位置上的加权因子,其数值如下表: 

i 1 2 3 4 5 6 7 8 

Wi 3 7 9 10 5 8 4 2 

当MOD函数值为1(即 C9 = 10)时,校验码用字母X表示。

JavaScrip版:

function isValidEntpCode(code, has) {

    var ws = [3, 7, 9, 10, 5, 8, 4, 2];

    var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    var reg = /^([0-9A-Z]){8}$/;

    if (!reg.test(C1_8)) {

        return false;

    }

    var sum = 0;

    for (var i = 0; i < 8; i++) {

        sum += str.indexOf(C1_8.charAt(i)) * ws[i];

    }

    var C9 = 11 - (sum % 11);

    if (C9 == 11) {

        return '0';

    } else if (C9 == 10) {

        return 'X'

    } else {

        return C9

    }

}

document.writeln(isValidEntpCode("E0000000-X"));

document.writeln(isValidEntpCode("790E3765-0"));

document.writeln(isValidEntpCode("79013765-X"));

document.writeln(isValidEntpCode("78305975-3"));

Java版

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class ValidateUtils {

    protected static final Logger logger = LoggerFactory.getLogger(ValidateUtils.class);

    /**

     * 验证企业代码是否正确

     *

     * @param code 企业组织机构代码

     * @return

     */

    public static final boolean isValidEntpCode(String code) {

        int[] ws = { 3, 7, 9, 10, 5, 8, 4, 2 };

        String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        String regex = "^([0-9A-Z]){8}-[0-9|X]$";

        if (!code.matches(regex)) {

            return false;

        }

        int sum = 0;

        for (int i = 0; i < 8; i++) {

            sum += str.indexOf(String.valueOf(code.charAt(i))) * ws[i];

        }

        logger.info("sum is {}", sum);

        logger.info("sum % 11 is {}", sum % 11);

        int c9 = 11 - (sum % 11);

        String sc9 = String.valueOf(c9);

        if (11 == c9) {

            sc9 = "0";

        } else if (10 == c9) {

            sc9 = "X";

        }

        logger.info("sc9 is {}", sc9);

        return sc9.equals(String.valueOf(code.charAt(9)));

    }

}

oc版:

+ (BOOL) isValidateEntpCode:(NSString *)code {

    BOOL result = NO;

    NSArray *ws = @[@"3",@"7",@"9",@"10",@"5",@"8",@"4",@"2"];

    NSArray *str = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",

                     @"9",@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",

                     @"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z"];

    NSString *regex = @"^([0-9A-Z]){8}-[0-9|X]$";

    NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    if (![pred evaluateWithObject:code]) {

        return result = NO;

    }

    

    int sum = 0;

    for (int i = 0; i < 8; i++) {

        NSString *temp = [code substringWithRange:NSMakeRange(i,1)];

        NSUInteger index = [str indexOfObject:temp];

        sum += index * [ws[i] intValue];

        

    }

    int c9 = 11 - (sum % 11);

    NSString *sc9 = [NSString stringWithFormat:@"%d",c9];

    if (11 == c9) {

        sc9 = @"0";

    } else if (10 == c9){

        sc9 = @"X";

    }

    NSString *lastA = [code substringFromIndex:([code length]-1)];

    return [sc9 isEqualToString:lastA];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: