/// <summary> /// 数据类型校验 /// </summary> /// zouql 16.09.28 /// <param name="data"></param> private void BaseTypeComare(MessageInfo data) { // 基础段必填验证 if (data.A.Count == 0) { ShowError(message: "基础段必填"); } // 段规则Code集合 var paragraphCodes = new List <string>() { "A", "B", "C", "D", "E", "G", "H", "I", "J", "K" }; // 同一metaCode对应的不同段的值的集合 var values = new List <string>(); // Meta访问实例 var metaMapper = new DAL.BankCredit.MetaMapper(); // RuleType访问实例 var ruleTypeMapper = new DAL.BankCredit.RuleTypeMapper(); // 段规则校验实例 var comPare = new DataAndRuleComPare(); // 遍历metaCode foreach (var metaCode in PData.Mates.Keys) { foreach (var item in dataDic) { // 必填项 if (item.Value.Substring(0, 1).Equals("M") && item.Value.Substring(1, item.Value.Length - 1).Equals(metaCode)) { var value = GetValue(Convert.ToInt32(metaCode), item.Key.Substring(0, 1), data); var paragraphData = SearchParegraphCode(item.Key.Substring(0, 1), data); if (string.IsNullOrEmpty(value) && paragraphData != null && paragraphData.Count > 0) { ShowError(message: item.Key + "必填"); } } } // 清空values values.Clear(); // 获取同一metaCode对应的不同段的值的集合 paragraphCodes.ForEach(delegate(string item) { var value = GetValue(Convert.ToInt32(metaCode), item, data); if (!string.IsNullOrEmpty(value)) { values.AddRange(value.Split('.')); } } ); // 值存在,进一步校验 if (values.Count > 0) { // 获取MetaInfo var metaInfo = metaMapper.Find(Convert.ToInt32(metaCode)) ?? new MetaInfo(); // 获取RuleType var ruleTypeInfo = ruleTypeMapper.Find(Convert.ToInt32(metaCode)) ?? new RuleTypeInfo(); for (var i = 0; i < values.Count; i++) { #region 校验类型 if (!comPare.VarificationData(metaInfo, values[i])) { ShowError(message: "类型校验未通过"); } #endregion #region 贷款卡编码、组织机构代码校验 if (metaCode.Equals("7503") && metaCode.Equals("7505")) { if (!ValidFn.IdCard_Valid(values[i])) { ShowError(message: "贷款卡编码校验未通过"); } } else if (metaCode.Equals("6507") && metaCode.Equals("6511")) { if (!ValidFn.IdCard_Valid(values[i])) { ShowError(message: "组织机构代码校验未通过"); } } #endregion else { #region 金额、时间、整数校验 var valueInt = -1; if (ruleTypeInfo.MoneyType) { // 验证金额 if (!int.TryParse(values[i], out valueInt) && valueInt <= 0) { ShowError(message: "金额校验未通过"); } } else if (ruleTypeInfo.TimeType) { // 验证时间 if (!int.TryParse(values[i], out valueInt) && valueInt <19000101 && valueInt> Convert.ToInt32(string.Format("{0:yyyyMMdd}", DateTime.Now))) { ShowError(message: "时间校验未通过"); } } else if (ruleTypeInfo.TimeType) { // 验证整数 if (!int.TryParse(values[i], out valueInt) && valueInt < 0) { ShowError(message: "整数校验未通过"); } } #endregion } } } } }
/// <summary> /// 通用验证方法 /// </summary> /// yangj 2016.09.27 /// zouql 2016.10.14 代码整理及新增验证 /// <param name="infoTypeId">信息记录ID</param> /// <param name="data">数据</param> public override void Valid(int infoTypeId, MessageInfo data) { #region 元数据 // 授信额度 var value1101 = GetValue(1101, "A", data); // 最大负债额 var value1103 = GetValue(1103, "A", data); // 余额 var value1109 = GetValue(1109, "A", data); // 当前逾期总额 var value1111 = GetValue(1111, "A", data); // 逾期31-60天未归还贷款本金 var value1113 = GetValue(1113, "A", data); // 逾期61-90天未归还贷款本金 var value1115 = GetValue(1115, "A", data); // 逾期91-180天未归还贷款本金 var value1117 = GetValue(1117, "A", data); // 逾期180天以上未归还贷款本金 var value1119 = GetValue(1119, "A", data); // 开户日期 var value2101 = GetValue(2101, "A", data); // 到期日期 var value2103 = GetValue(2103, "A", data); // 最近一次实际还款日期 var value2107 = GetValue(2107, "A", data); // 结算/还款日期 var value2301 = GetValue(2301, "A", data); // 出生日期 var value2408 = GetValue(2408, "B", data); // 还款月数 var value4101 = GetValue(4101, "A", data); // 剩余还款月数 var value4105 = GetValue(4105, "A", data); // 最高逾期期数 var value4107 = GetValue(4107, "A", data); // 当前逾期期数 var value4109 = GetValue(4109, "A", data); // 还款频率 var value4111 = GetValue(4111, "A", data); // 累计逾期期数 var value4312 = GetValue(4312, "A", data); // 姓名 var value5101 = GetValue(5101, "E", data); // 证件类型 var value5107 = GetValue(5107, "E", data); // 证件号码 var value5109 = GetValue(5109, "E", data); // 金融机构代码 var value6101 = GetValue(6101, "A", data); // 金融机构代码[交易标识变更段] var value6101F = GetValue(6101, "F", data); // 业务号[基础段] var value7101 = GetValue(7101, "A", data); // 业务号[交易标识变更段] var value7101F = GetValue(7101, "F", data); // 24个月(账户)还款状态 var value7107 = GetValue(7107, "A", data); // 账号状态 var value7109 = GetValue(7109, "A", data); // 业务种类细分 var value7111 = GetValue(7111, "A", data); // 业务种类 var value7117 = GetValue(7117, "A", data); // 拥有者信息提示 var value7121 = GetValue(7121, "A", data); #endregion #region // 026 [还款月数] > [剩余还款月数] if (!string.IsNullOrEmpty(value4101) && !string.IsNullOrEmpty(value4105)) { if (value4101 != "O" && value4101 != "U" && value4101 != "C" && value4105 != "O" && value4105 != "U" && value4105 != "C") { if (Convert.ToInt32(value4101) <= Convert.ToInt32(value4105)) { ShowError(message: "基础段中“还款月数” > “剩余还款月数”"); } } } #endregion #region // 029 [余额] <= [最大负债额] if (!string.IsNullOrEmpty(value1109) && !string.IsNullOrEmpty(value1103)) { if (Convert.ToDouble(value1109) > Convert.ToDouble(value1103)) { ShowError(message: "基础段中“余额” <= “最大负债额”"); } } #endregion #region // 020 [还款频率] = '07-一次性', [还款月数] = 'O' [剩余还款月数] = 'O' [还款频率] = '08-不定期',[还款月数] = 'U' [剩余还款月数] = 'U' if (!string.IsNullOrEmpty(value4111) && !string.IsNullOrEmpty(value4101) && !string.IsNullOrEmpty(value4105)) { if (value4111 == "07" && value4101 != "O" && value4105 != "O") { ShowError(message: "基础段中,若“还款频率”为“一次性”,则“还款月数”、“剩余还款月数”用字母“O”填充"); } if (value4111 == "08" && value4101 != "U" && value4105 != "U") { ShowError(message: "基础段中,若“还款频率”为“不定期”,则“还款月数”、“剩余还款月数”用“U”填充"); } } #endregion #region // 028 [最近一次实际还款日期] > [开户日期] if (!string.IsNullOrEmpty(value2107) && !string.IsNullOrEmpty(value2101)) { if (Convert.ToInt32(value2107) < Convert.ToInt32(value2101)) { ShowError(message: "基础段中“最近一次实际还款日期” >= “开户日期”"); } } #endregion #region // 018 [业务种类] = '1-贷款',[授信额度] >= [最大负债额] if (value7117 == "1" && !string.IsNullOrEmpty(value1101) && !string.IsNullOrEmpty(value1103)) { if (Convert.ToDouble(value1101) < Convert.ToDouble(value1103)) { ShowError(message: "基础段中“授信额度” >= “最大负债额”"); } } #endregion #region // 015 [业务种类] = '2-信用卡',[到期日期] = '20991231' if (value7117 == "2" && !string.IsNullOrEmpty(value2103)) { if (value2103 != "20991231") { ShowError(message: "基础段中,当“业务种类”为“信用卡”时,“到期日期”必须为“20991231”"); } } #endregion #region // 017 [业务种类] = '2-信用卡',[业务种类细分] = '71-贷记卡' or [业务种类细分] = '81-准贷记卡' if (value7117 == "2" && !string.IsNullOrEmpty(value7111)) { if (value7111 != "71" && value7111 != "81") { ShowError(message: "基础段中,“业务种类”为“信用卡”时,“业务种类细分”只能填写“准贷记卡”、“贷记卡”"); } } #endregion #region // 015 [开户日期] <= [结算/应还款日期] if (!string.IsNullOrEmpty(value2101) && !string.IsNullOrEmpty(value2301)) { if (Convert.ToInt32(value2101) > Convert.ToInt32(value2301)) { ShowError(message: "基础段中“开户日期” <= “结算/还款日期”"); } } #endregion #region // 015 [开户日期] <= [到期日期] if (!string.IsNullOrEmpty(value2101) && !string.IsNullOrEmpty(value2103)) { if (Convert.ToInt32(value2101) > Convert.ToInt32(value2103)) { ShowError(message: "基础段中“开户日期” <= “到期日期”"); } } #endregion #region // 022 [业务种类] = '1-贷款' [账号状态] = '3-结算',[余额] = '0' [当前逾期期数] = '0' [当前逾期总额] = '0' if (value7117 == "1" && value7109 == "3") { if (value1109 != "0" || value4109 != "0" || value1111 != "0") { ShowError(message: "基础段中,“业务种类”为“贷款”,且“账户状态为”结清”时,“余额、当前逾期期数、当前逾期总额”必须为零"); } } #endregion #region // 021 [业务种类] = '1-贷款' [账号状态] = '2-逾期' or [账号状态] = '4-呆账',[当前逾期期数] != '0' [当前逾期总额] != '0' [累计逾期期数] != '0' [最高逾期期数] != '0' if (value7117 == "1" && (value7109 == "2" || value7109 == "4")) { if (value4109 == "0" || value1111 == "0" || value4312 == "0" || value4107 == "0") { ShowError(message: "基础段中,业务种类”为“贷款”时,若“账户状态”为“逾期”或“呆账”,则“当前逾期期数、当前逾期总额、累计逾期期数、最高逾期期数”不能为零"); } } #endregion #region // 030 [业务种类] = '2-信用卡' [业务种类细分] = '81-贷记卡',[余额] >= [当前逾期总额] if (value7117 == "2" && value7111 == "81" && !string.IsNullOrEmpty(value1109) && !string.IsNullOrEmpty(value1111)) { if (Convert.ToDouble(value1109) < Convert.ToDouble(value1111)) { ShowError(message: "基础段中,“业务种类”为“信用卡”,且“业务种类细分”为“贷记卡”时,”余额”>=“当前逾期总额”"); } } #endregion #region // 019 [业务种类] = "1-贷款",[还款频率] != "C" if (value7117 == "1" && !string.IsNullOrEmpty(value4111)) { if (value4111 == "C") { ShowError(message: "基础段中,“业务种类”为“贷款”时,“还款频率”必须为“信用卡还款频率”以外的数据字典中的值"); } } #endregion #region // 019 [业务种类] = "2-信用卡",[还款频率] = "C" if (value7117 == "2" && !string.IsNullOrEmpty(value4111)) { if (value4111 != "C") { ShowError(message: "基础段中,“业务种类”为“信用卡”时,“还款频率”填“信用卡还款频率”"); } } // 019 [业务种类] = "2-信用卡",[还款月数] = "C" [剩余还款月数] = "C" if (value7117 == "2" && !string.IsNullOrEmpty(value4101) && !string.IsNullOrEmpty(value4105)) { if (value4101 != "C" || value4105 != "C") { ShowError(message: "基础段中,“业务种类”为“信用卡”时,“还款月数”、“剩余还款月数”填“C”"); } } #endregion #region // 016 [业务种类] = "1-贷款",[业务种类细分] = "11-个人住房贷款" or "12-个人商用房贷款" or "13-个人住房公积金贷款" or "21-个人汽车贷款" or "31-个人助学贷款" or "41-个人经营性贷款" or "51-农户贷款" or "91-个人消费贷款" or "99-其他" if (value7117 == "1" && !string.IsNullOrEmpty(value7111)) { if (value7111 != "11" && value7111 != "12" && value7111 != "13" && value7111 != "21" && value7111 != "31" && value7111 != "41" && value7111 != "51" && value7111 != "91" && value7111 != "99") { ShowError(message: "基础段中,“业务种类”为“贷款”时,“业务种类细分”只能填写“个人住房贷款”、“个人商用房贷款”、“个人住房公积金贷款”、“个人汽车贷款”、“个人助学贷款”、“个人经营性贷款”、“农户贷款”、“个人消费贷款”、“其他”"); } } #endregion #region // 账户状态数据段规则ID,账户状态选项选中值 var accountStatusId = new SegmentRules().GetIdByMetaAndInfoType(infoTypeId, 7109, "A"); var accountStatusCode = value7109; // 016 [业务种类]= "1-贷款",[账户状态] 必须填写[贷款]项下的代码 if (value7117 == "1" && !string.IsNullOrEmpty(accountStatusId) && !string.IsNullOrEmpty(accountStatusCode)) { var result = new CodeProofMethod().CodePoorfMethod(Convert.ToInt32(accountStatusId), accountStatusCode); if (result == false) { ShowError(message: "基础段中,“业务种类”为“贷款”时,“账户状态”必须填写“贷款”项下的代码"); } } // 017 [业务种类]= "2-信用卡",[账户状态] 必须填写[信用卡]项下的代码 if (value7117 == "2" && !string.IsNullOrEmpty(accountStatusId) && !string.IsNullOrEmpty(accountStatusCode)) { var result = new CodeProofMethod().CodePoorfMethod(Convert.ToInt32(accountStatusId), accountStatusCode); if (result == false) { ShowError(message: "基础段中,“业务种类”为“信用卡”时,“账户状态”必须填写“信用卡”项下的代码"); } } #endregion #region // 031 [逾期31-60天未归还贷款本金]+[逾期61-90天未归还贷款本金]+[逾期91-180天未归还贷款本金]+[逾期180天以上未归还贷款本金] <= [余额]+2 if (!string.IsNullOrEmpty(value1113) && !string.IsNullOrEmpty(value1115) && !string.IsNullOrEmpty(value1117) && !string.IsNullOrEmpty(value1119) && !string.IsNullOrEmpty(value1109)) { var sum = Convert.ToInt32(value1113) + Convert.ToInt32(value1115) + Convert.ToInt32(value1117) + Convert.ToInt32(value1119); if (sum > (Convert.ToInt32(value1109) + 2)) { ShowError(message: "基础段中,“逾期31-60天未归还贷款本金”+“逾期61-90天未归还贷款本金”+“逾期91-180天未归还贷款本金”+“逾期180天以上未归还贷款本金” <= “余额”+2"); } } #endregion #region // 033 [逾期31-60天未归还贷款本金]+[逾期61-90天未归还贷款本金]+[逾期91-180天未归还贷款本金]+[逾期180天以上未归还贷款本金] <= [当前逾期总额]+2 if (!string.IsNullOrEmpty(value1113) && !string.IsNullOrEmpty(value1115) && !string.IsNullOrEmpty(value1117) && !string.IsNullOrEmpty(value1119) && !string.IsNullOrEmpty(value1111)) { var sum = Convert.ToInt32(value1113) + Convert.ToInt32(value1115) + Convert.ToInt32(value1117) + Convert.ToInt32(value1119); if (sum > (Convert.ToInt32(value1111) + 2)) { ShowError(message: "基础段中,“逾期31-60天未归还贷款本金”+“逾期61-90天未归还贷款本金”+“逾期91-180天未归还贷款本金”+“逾期180天以上未归还贷款本金” <= “当前逾期总额”+2"); } } #endregion #region // 032 [业务种类]= "1-贷款",[当前逾期期数] <= [最高逾期期数] <= [累计逾期期数] if (value7117 == "1" && !string.IsNullOrEmpty(value4109) && !string.IsNullOrEmpty(value4107) && !string.IsNullOrEmpty(value4312)) { var result = Convert.ToInt32(value4109) <= Convert.ToInt32(value4107) && Convert.ToInt32(value4107) <= Convert.ToInt32(value4312); if (!result) { ShowError(message: "基础段中“业务种类”为“贷款”时,“当前逾期期数” <= “最高逾期期数” <= “累计逾期期数”"); } } #endregion #region // 009 有效日期验证(出生日期不能大于当前日期) if (!string.IsNullOrEmpty(value2408)) { if (Convert.ToInt32(value2408) > Convert.ToInt32(string.Format("{0:yyyyMMdd}", DateTime.Now))) { ShowError(message: "出生日期不能大于当前日期"); } } #endregion #region // 040 担保信息段中“证件类型”为“0-身份证”时,担保信息段中“证件号码”必须为15位或18位,且15位身份证号码的每一位必须都是数字,18位身份证号码的前17位必须都是数字,18位身份证号码的最后一位必须都是数字或大写的X。 if (!string.IsNullOrEmpty(value5107) && !string.IsNullOrEmpty(value5109)) { var value5107Array = value5107.Split('.'); var value5109Array = value5109.Split('.'); for (var i = 0; i < value5107Array.Length; i++) { var reg = ValidFn.IdCard_Valid(value5109Array[i]); if (value5107Array[i] == "0" && !reg) { ShowError(message: "担保信息段中,证件号码错误"); } } } #endregion #region // 担保信息段中,任意两个担保信息段的“证件类型、“证件号码”不能完全相同 if (!string.IsNullOrEmpty(value5101) && !string.IsNullOrEmpty(value5107) && !string.IsNullOrEmpty(value5109)) { var value5101Array = value5101.Split('.'); var value5107Array = value5107.Split('.'); var value5109Array = value5109.Split('.'); var tempArray = new List <string>(); for (var i = 0; i < value5101Array.Length; i++) { if (!tempArray.Contains(value5107Array[i] + value5109Array[i])) { tempArray.Add(value5107Array[i] + value5109Array[i]); } } if (tempArray.Count != value5101Array.Length) { ShowError(message: "担保信息段中,任意两个担保信息段的“证件类型、“证件号码”不能完全相同"); } } #endregion #region // 交易标识变更段中“金融机构代码”+“业务号”不能和基础段中“金融机构代码”+“业务号”相同 if (!string.IsNullOrEmpty(value6101) && !string.IsNullOrEmpty(value6101F) && !string.IsNullOrEmpty(value7101) && !string.IsNullOrEmpty(value7101F)) { if (value6101.Equals(value6101F) && value7101.Equals(value7101F)) { ShowError(message: "交易标识变更段中“金融机构代码”+“业务号”不能和基础段中“金融机构代码”+“业务号”相同"); } } #endregion #region // 当基础段中的账户拥有者信息提示为“2-新账户开立”时,不能包含交易标识变更段 // 当基础段中的账户拥有者信息提示为“1-已开立账户”时,不能包含身份信息段、职业信息段、居住地址段 if (!string.IsNullOrEmpty(value7121)) { if (value7121.Equals("2") && data.F.Count > 0) { ShowError(message: "当基础段中的账户拥有者信息提示为“新账户开立”时,不能包含交易标识变更段"); } else if (value7121.Equals("1")) { if (data.B.Count > 0 || data.C.Count > 0 || data.D.Count > 0) { ShowError(message: "当基础段中的账户拥有者信息提示为“已开立账户”时,不能包含身份信息段、职业信息段、居住地址段"); } } } #endregion #region // 新增验证 #endregion }