Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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
                }
            });
        }