/// <summary> /// 设置证件号长度对应的校验规则 /// </summary> /// <param name="idLength">默认校验实现对应的编号长度</param> /// <param name="validator">默认实现</param> public static void SetValidator(int idLength, IIDValidator validator) { if (validator == null) { throw new ArgumentNullException(nameof(validator)); } concurrentDictionary.AddOrUpdate(idLength, k => validator, (k, a) => validator); }
/// <summary> /// 验证身份证是否正确 /// </summary> /// <param name="idNumber">待验证的证件号码</param> /// <param name="minYear">允许最小年份,默认0</param> /// <param name="validLength">要验证的证件长度,默认不指定null</param> /// <param name="validLimit">验证区域级别,默认AreaValidLimit.Province</param> /// <param name="ignoreCheckBit">是否忽略校验位验证,默认false</param> /// <returns>验证结果</returns> public static IDValidationResult Validate(this string idNumber, ushort minYear = 0, int?validLength = null, AreaValidLimit validLimit = AreaValidLimit.Province, bool ignoreCheckBit = false) { IIDValidator validator = null; _ = ValidatorHelper.ValidEmpty(idNumber, out IDValidationResult result, ErrorMessage.Empty) && ValidatorHelper.ValidLength(idNumber, validLength, ErrorMessage.LengthOutOfRange, result) && ValidImplement(idNumber, result, out validator); return(validator == null ? result : validator.Validate(idNumber, minYear, validLimit, ignoreCheckBit)); }
private static bool ValidImplement(string code, IDValidationResult result, out IIDValidator validator) { _ = concurrentDictionary.TryGetValue(code.Length, out validator) || ValidatorHelper.ValidImplement(code, result, "ID{0}Validator", ErrorMessage.InvalidImplement, out validator, typeof(IIDValidator)); return(validator != null); }