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

本文由 比特飞 原创发布,欢迎大家踊跃转载。

转载请注明本文地址:C#开发笔记之09-如何用C#判断社会信用代码是否合法? | .Net中文网

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

}

本文由 比特飞 原创发布,欢迎大家踊跃转载。

转载请注明本文地址:C#开发笔记之09-如何用C#判断社会信用代码是否合法? | .Net中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值