企业组织机构代码验证JavaScript版和Java版 - 修正版V20090214

组织机构代码验证规则:

组织机构代码是每一个机关、社会团体、企事业单位在全国范围内唯一的、始终不变的法定代码标识。
最新使用的组织机构代码在1997年颁布实施,由8位数字(或大写拉丁字母)本体代码和1位数字(或大写拉丁字母)校验码组成。本体代码采用系列(即分区段)顺序编码方法。校验码按下列公式计算:
8
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版:

  1. function isValidEntpCode(code, has) {  
  2.     var ws = [3, 7, 9, 10, 5, 8, 4, 2];  
  3.     var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';  
  4.     var reg = /^([0-9A-Z]){8}$/;   
  5.     if (!reg.test(C1_8)) {  
  6.         return false;  
  7.     }  
  8.     var sum = 0;  
  9.     for (var i = 0; i < 8; i++) {  
  10.         sum += str.indexOf(C1_8.charAt(i)) * ws[i];  
  11.     }  
  12.     var C9 = 11 - (sum % 11);  
  13.     if (C9 == 11) {  
  14.         return '0';  
  15.     } else if (C9 == 10) {  
  16.         return 'X'  
  17.     } else {  
  18.         return C9  
  19.     }  
  20. }  
  21. document.writeln(isValidEntpCode("E0000000-X"));  
  22. document.writeln(isValidEntpCode("790E3765-0"));  
  23. document.writeln(isValidEntpCode("79013765-X"));  
  24. document.writeln(isValidEntpCode("78305975-3"));  

 Java版:

  1. import org.slf4j.Logger;  
  2. import org.slf4j.LoggerFactory;  
  3.   
  4. public class ValidateUtils {  
  5.   
  6.     protected static final Logger logger = LoggerFactory.getLogger(ValidateUtils.class);  
  7.   
  8.     /** 
  9.      * 验证企业代码是否正确 
  10.      *  
  11.      * @param code 企业组织机构代码 
  12.      * @return 
  13.      */  
  14.     public static final boolean isValidEntpCode(String code) {  
  15.         int[] ws = { 379105842 };  
  16.         String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
  17.         String regex = "^([0-9A-Z]){8}-[0-9|X]$";  
  18.   
  19.         if (!code.matches(regex)) {  
  20.             return false;  
  21.         }  
  22.         int sum = 0;  
  23.         for (int i = 0; i < 8; i++) {  
  24.             sum += str.indexOf(String.valueOf(code.charAt(i))) * ws[i];  
  25.         }  
  26.         logger.info("sum is {}", sum);  
  27.         logger.info("sum % 11 is {}", sum % 11);  
  28.   
  29.         int c9 = 11 - (sum % 11);  
  30.   
  31.         String sc9 = String.valueOf(c9);  
  32.         if (11 == c9) {  
  33.             sc9 = "0";  
  34.         } else if (10 == c9) {  
  35.             sc9 = "X";  
  36.         }  
  37.         logger.info("sc9 is {}", sc9);  
  38.         return sc9.equals(String.valueOf(code.charAt(9)));  
  39.     }  
  40. }  
  41. http://blog.csdn.net/kimsoft/archive/2009/01/14/3776068.aspx
posted @ 2011-06-20 14:21  s80895304  阅读(840)  评论(0编辑  收藏  举报