/// <summary> /// 实名认证 /// </summary> public bool IdCardAuth(IdAuthReq req) { req.Pic1 = "/" + req.Pic1.Replace(AppConfig.ImageBaseUrl, "").TrimStart('/'); req.Pic3 = "/" + req.Pic3.Replace(AppConfig.ImageBaseUrl, "").TrimStart('/'); var regInfo = db.TnetReginfoSet.FirstOrDefault(x => x.Nodeid == req.Nodeid); var authLog = db.TzcAuthLogSet.FirstOrDefault(x => x.Nodeid == req.Nodeid); var nodeInfo = db.TnetNodeinfoSet.FirstOrDefault(x => x.Nodeid == req.Nodeid); if (regInfo.Isconfirmed == 1 && authLog != null && nodeInfo != null && (authLog.Status == 1 || authLog.Status == 5)) { return(Fail("已通过实名认证,不要重复认证")); } IdCardService idCardService = new IdCardService(); IdentResult recResult1 = idCardService.GetRecResult(req.Pic1); if (recResult1 == null) { return(Fail("未找到身份证正面照识别结果")); } IdentResult recResult2 = idCardService.GetRecResult(req.Pic3); if (recResult2 == null) { return(Fail("未找到身份证反面照识别结果")); } var res = ValidateAuthRegInfo(req.Nodeid, recResult1, authLog);//验证信息 if (!res) { return(false); } DateTime myDate = DateTime.Now; TzcAuthLog newAuthLog = new TzcAuthLog(); if (authLog != null) { newAuthLog = authLog; myDate = authLog.Createtime; } newAuthLog.Nodeid = regInfo.Nodeid; newAuthLog.Createtime = DateTime.Now; newAuthLog.Remarks = "用户认证"; newAuthLog.Realname = req.IdCardName.IsNullOrWhiteSpace() ? recResult1.cards[0].name : req.IdCardName; try { newAuthLog.Birthday = Convert.ToDateTime(recResult1.cards[0].birthday); } catch (Exception err) { log.Info(recResult1.cards[0].birthday + "转换为生日失败," + err.ToString()); } newAuthLog.Race = recResult1.cards[0].race; newAuthLog.Sex = recResult1.cards[0].gender == "女" ? 2 : 1; newAuthLog.Idcard = req.IdCardNum.IsNullOrWhiteSpace() ? recResult1.cards[0].id_card_number : req.IdCardNum; newAuthLog.Address = recResult1.cards[0].address; newAuthLog.IssuedBy = recResult2.cards[0].issued_by; newAuthLog.ValidDate = recResult2.cards[0].valid_date; //分解身份证身日性别 if (newAuthLog.Idcard.Length == 18 && !newAuthLog.Birthday.HasValue) { //(1)前1、2位数字表示:所在省份的代码; //(2)第3、4位数字表示:所在城市的代码; //(3)第5、6位数字表示:所在区县的代码; //(4)第7~14位数字表示:出生年、月、日; //(5)第15、16位数字表示:所在地的派出所的代码; //(6)第17位数字表示性别:奇数表示男性,偶数表示女性; //(7)第18位数字是校检码:也有的说是个人信息码,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示(尾号是10,那么就得用X来代替)。 一般是随计算机的随机产生。 newAuthLog.Sex = Convert.ToInt32(newAuthLog.Idcard.Substring(16, 1)) % 2 == 0 ? 2 : 1; newAuthLog.Birthday = new DateTime(Convert.ToInt32(newAuthLog.Idcard.Substring(6, 4)), Convert.ToInt32(newAuthLog.Idcard.Substring(10, 2)), Convert.ToInt32(newAuthLog.Idcard.Substring(12, 2))); } FileService fileService = new FileService(); newAuthLog.Idcardpic1 = fileService.CombinePicUrl(req.Pic1, myDate, FileActionType.身份证正面图片); newAuthLog.Idcardpic3 = fileService.CombinePicUrl(req.Pic3, myDate, FileActionType.身份证反面图片); newAuthLog.Isidentify = 1; newAuthLog.Baiduapiret = "0"; newAuthLog.Status = 0; //通过实人认证,不需要再审核了 //添加或更新认证日志 if (authLog == null) { db.TzcAuthLogSet.Add(newAuthLog); } else { db.TzcAuthLogSet.Attach(newAuthLog); db.Entry(newAuthLog).State = EntityState.Modified; } //更新tnet_nodeinfo表 bool isExistnodeInfo = nodeInfo != null; if (nodeInfo == null) { nodeInfo = new TnetNodeinfo(); } BuildNodeInfo(nodeInfo, newAuthLog); if (!isExistnodeInfo) { db.TnetNodeinfoSet.Add(nodeInfo); } else { db.TnetNodeinfoSet.Attach(nodeInfo); db.Entry(nodeInfo).State = EntityState.Modified; } if (regInfo.Isconfirmed == 0) { regInfo.Isconfirmed = 1; regInfo.Nodename = newAuthLog.Realname; regInfo.Authtime = DateTime.Now; if (db.Entry(regInfo).State == EntityState.Detached) { db.TnetReginfoSet.Attach(regInfo); db.Entry(regInfo).State = EntityState.Modified; } } int scnt = db.SaveChanges(); return(true); }
/// <summary> /// 上传文件 /// </summary> private Respbase <IdCardUploadFileDto> UploadImg(ReqUploadFile req) { FileService fileService = new FileService(); if (!fileService.SaveFile(req)) { return(new Respbase <IdCardUploadFileDto> { Result = -1, Message = "保存文件失败", Data = null }); } if (req.ImageActionType == FileActionType.身份证正面图片 || req.ImageActionType == FileActionType.身份证反面图片) { IdCardService idCardService = new IdCardService(); var res = idCardService.IdCardPicRecognise((int)req.ImageActionType, fileService.PhysicsFilePath); if (res.Result == 1) { return(new Respbase <IdCardUploadFileDto> { Result = res.Result, Data = new IdCardUploadFileDto { Url = fileService.FilePath, IdentCard = res.Data }, Message = res.Message }); } return(new Respbase <IdCardUploadFileDto> { Result = res.Result, Data = new IdCardUploadFileDto { Url = fileService.Image2FilePath, }, Message = res.Message }); } if (req.ImageActionType == FileActionType.驾驶证行驶证) { string photoPhysicalPath = FileService.GetPhysicsFilePath(fileService.FilePath); (bool success, string message, object result) = ScanLicense.GetInstance(LicenseTypeEnum.Driver).Execute(new ExecuteEntity() { PhotoPhysicalPath = photoPhysicalPath }); if (!success) { return(new Respbase <IdCardUploadFileDto> { Result = -1, Message = "识别驾驶证失败", Data = new IdCardUploadFileDto { Url = fileService.Image2FilePath } }); } DriverResult driResult = ((DriverResp)result).words_result; PXinContext db = HttpContext.Current.GetDbContext <PXinContext>(); var tnetNodeInfo = db.TnetNodeinfoSet.FirstOrDefault(w => w.Nodeid == req.Nodeid); if (tnetNodeInfo == null) { return(new Respbase <IdCardUploadFileDto> { Result = -1, Message = "用户未进行身份认证", Data = new IdCardUploadFileDto { Url = fileService.Image2FilePath } }); } if (tnetNodeInfo.Name.Trim() != driResult.姓名.words.Trim() || tnetNodeInfo.Idcardno.Trim() != driResult.证号.words.Trim()) { return(new Respbase <IdCardUploadFileDto> { Result = -1, Message = "驾驶证信息与身份证信息不一致", Data = new IdCardUploadFileDto { Url = fileService.Image2FilePath } }); } } return(new Respbase <IdCardUploadFileDto> { Data = new IdCardUploadFileDto { Url = fileService.Image2FilePath } }); }