C#开发笔记之09-如何用C#判断社会信用代码是否合法?

C#开发笔记之09-如何用C#判断社会信用代码是否合法?

C#开发笔记概述

文章目录

概述

法人和其他组织统一社会信用代码相当于让法人和其他组织拥有了一个全国统一的“身份证号”,是推动社会信用体系建设的一项重要改革措施。截至2018年3月底,全国法人和非法人组织存量代码转换率为99.8%,存量证照换发率82%;全国个体工商户存量换码率95%。

那么如何使用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();
    }

}

本文由 .Net中文网 原创发布,欢迎大家踊跃转载。

转载请注明本文地址:https://www.byteflying.com/archives/3125

发表评论

登录后才能评论