C#判断社会信用代码是否合法

public static class SocialCreditCodeHelper {

    // 白名单,解决部分地区的社会信用代码不符合国家相关标准导致的判定错误
    private static IList<string> _whiteList = new List<string>() {
            //此处代码后4位被隐藏,实际开发过程中请替换为自己的白名单列表
            "91510100780134XXXX",
            "91350100M0000TXXXX",
            "91350100M0001TXXXX",
        };

    public static bool CheckSocialCreditCode(string code) {
        if (code == null || code.Length != 18) return false;

        code = code.ToUpper();

        if (_whiteList.Contains(code)) return true;

        var factor = new int[] { 1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28 };
        var str = "0123456789ABCDEFGHJKLMNPQRTUWXY";

        var total = factor.Select((p, i) => p * str.IndexOf(code[i])).Sum();
        var index = total % 31 == 0 ? 0 : (31 - total % 31);

        return str[index] == code.Last();
    }

}

 

posted @ 2021-02-20 16:23  imnet  阅读(279)  评论(0)    收藏  举报