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