ylbtech-Modules:手机号码验证

手机号码验证,文档以JFB项目架构为原型,介绍实现原理,如何调用和应用实例。

架构包括5个主要模块:Basebase,Base,Service,Api和Web。表的设计,实体,数据库操作类,API,Web的网站配置、注册和找回密码实例。

1. Database返回顶部
1、\Tables\VerifyCode/VerifyCode.sql
CREATE TABLE [dbo].[VerifyCode]
([Id] INT NOT NULL PRIMARY KEY IDENTITY, [Code] VARCHAR(50) NULL, [SndTo] VARCHAR(50) NULL, [SndContent] VARCHAR(1000) NULL, [CreateTime] DATETIME NULL, [IsDeleted] BIT NULL
)

2、
2. Base返回顶部
1、/VerifyCode/VerifyCode.cs
namespace DS.JZB.Base.VerifyCode
{[Dapper.Contrib.Extensions.Table("[VerifyCode]")]public class VerifyCode : BaseEntity{[Dapper.Contrib.Extensions.Key]public int Id { get; set; }/// <summary>/// 验证码/// </summary>public string Code { get; set; }/// <summary>/// 发送到/// </summary>public string SndTo { get; set; }/// <summary>/// 发送内容/// </summary>public string SndContent { get; set; }}
}

2、BaseEntity.cs

using System;namespace DS.JZB.Base {public interface IEntity {bool IsDeleted { get; set; }DateTime CreateTime { get; set; }}public abstract class BaseEntity : IEntity {#region Implementation of IEntitypublic bool IsDeleted { get; set; } = false;public DateTime CreateTime { get; set; } = DateTime.Now;#endregion}
}

View Code

3、
3. Service返回顶部
1、/VerifyCode
1.1、IVerifyService.cs
using System.Data;namespace DS.JZB.Service.VerifyCodes
{public interface IVerifyCodeService{/// <summary>/// 判断验证码是否有效/// </summary>/// <param name="code"></param>/// <param name="mobile"></param>void IsValidCode(string code, string mobile);/// <summary>/// 发送验证码/// </summary>/// <param name="sndTo"></param>string SndVerifyCode(string sndTo);void ValidateIsValidCode(string validCode, string mobile, IDbConnection conn, IDbTransaction trans);void IsValidCode(string code);}
}

1.2、VerifyService.cs

using System;
using System.Data;
using Dapper;
using Dapper.Contrib.Extensions;
using DS.JZB.Base;
using DS.JZB.Base.VerifyCode;
using DS.JZB.Common;
using System.Linq;
using DS.JZB.Service.Sms;namespace DS.JZB.Service.VerifyCodes {public class VerifyCodeService : IVerifyCodeService {/// <summary>/// 验证验证码是否有效/// </summary>/// <param name="code"></param>/// <param name="mobile"></param>public void IsValidCode(string code, string mobile) {DbConnectionManipulator.RunMainDatabase(conn => {var entity =conn.QueryFirstOrDefault<VerifyCode>("select * from VerifyCode where IsDeleted=0 and Code=@Code and SndTo=@SndTo",new { Code = code, SndTo = mobile });if (entity == null)throw new DsException("验证码不存在");//发送时间距离当前时间超过30分钟的为失败的if (entity.CreateTime.AddMinutes(30) < DateTime.Now)throw new DsException("验证码已失效");});}/// <summary>/// 发送验证码/// </summary>/// <param name="sndTo"></param>public string SndVerifyCode(string sndTo) {if (string.IsNullOrWhiteSpace(sndTo))throw new DsException("请输入手机号码");sndTo = sndTo.Trim();DbConnectionManipulator.RunMainDatabase(conn => {//1分钟内,如果已经发送过验证码,则不允许再次发送var model =conn.QueryFirstOrDefault("select * from VerifyCode where IsDeleted = 0 and SndTo=@SndTo and CreateTime>@CreateTime",new { SndTo = sndTo, CreateTime = DateTime.Now.AddMinutes(-1) });if (model != null)throw new DsException("验证码已发送,请勿重复发送");});var code = RndInt(6);var sndContent = "验证码{0}";sndContent = string.Format(sndContent, code);var entity = new VerifyCode {Code = code,SndContent = sndContent,SndTo = sndTo};Insert(entity);SmsService.Instance.SendValidateCodeSms(entity.SndTo, new {code = code.ToString(),product = "家服宝"});return code;}private void Insert(VerifyCode entity) {DbConnectionManipulator.RunMainDatabase(conn => {conn.Insert(entity);});}/// <summary>/// 验证是否是验证码/// </summary>/// <param name="validCode"></param>/// <param name="mobile"></param>/// <param name="conn"></param>/// <param name="trans"></param>public void ValidateIsValidCode(string validCode, string mobile, IDbConnection conn, IDbTransaction trans) {var fnOwnConn = conn == null;if (fnOwnConn) {conn = DbConnectionManipulator.GetMainDatabaseConnection();}var entity =conn.QueryFirstOrDefault<VerifyCode>("select * from VerifyCode where IsDeleted=0 and Code=@Code and SndTo=@SndTo",new { Code = validCode, SndTo = mobile }, trans);if (fnOwnConn) {conn.Close();conn.Dispose();}if (entity == null)throw new DsException("验证码不存在");//发送时间距离当前时间超过30分钟的为失败的if (entity != null && entity.CreateTime.AddMinutes(30) < DateTime.Now)throw new DsException("验证码已失效");}/// <summary>/// n位随机码/// </summary>/// <returns></returns>private string RndInt(int n) {const string str = "0123456789";var rStr = "";var rnd = new Random();for (var i = 0; i < n; i++) {var rndNum = rnd.Next(10);rStr += str.Substring(rndNum, 1);}return rStr;}public void IsValidCode(string code) {var result = DbConnectionManipulator.RunMainDatabase(conn => {return conn.QuerySingle<int>(@"DECLARE @CreateTime DATETIME
SELECT @CreateTime FROM dbo.VerifyCode WHERE IsDeleted=0 AND Code=@Code
IF @@ROWCOUNT=0
BEGIN
SELECT -1
RETURN
ENDIF DATEADD(MINUTE,30,@CreateTime)<GETDATE()
BEGIN
SELECT -2
RETURN
ENDSELECT 0", new { Code = code });});if (result == -1)throw new DsException("验证码不存在", ExceptionLevel.Error);//发送时间距离当前时间超过30分钟的为失败的if (result == -2)throw new DsException("验证码已失效", ExceptionLevel.Error);}public void MarkValidCodeInvalid(string code, string uniqueKey) {if (string.IsNullOrWhiteSpace(code)) {throw new DsException("请填写验证码");}DbConnectionManipulator.RunMainDatabaseInTransaction((conn, trans) => {var obj =conn.Query("SELECT TOP 1 * FROM RegCode WHERE Sign=@Sign AND CurStatus=0 AND CreateTime>=@CreateTime AND Code=@Code ORDER BY Id DESC",new { Sign = uniqueKey, CreateTime = DateTime.Now.AddMinutes(-30), Code = code }, trans).FirstOrDefault();if (obj == null) {return;}conn.Execute(@"UPDATE RegCode SET CurStatus=1 WHERE Id=@Id
UPDATE VerifyCode SET IsDeleted=1 WHERE Code=@Code", new { Id = obj.Id, Code = code }, trans);});}}
}

View Code

2、SMS
2.1、
2.2、
4. Api返回顶部
1、Controllers
1.1、Account
1.1.1、MemberController.cs
/// <summary>/// 获取注册验证码/// </summary>/// <param name="sndTo"></param>/// <param name="validateCode"></param>/// <param name="type"></param>/// <returns></returns>[Route("GetVerifyCode"), AllowAnonymous][HttpPost]public JsonResult GetVerifyCode(string sndTo, string validateCode, int type = 0, string vid = "", int userType = 1) {//if (!DefaultValidateCodeManager.Instance.IsValidValidateCode(validateCode, vid)) {//    return Json(ResultModel.NewError("校验码输入错误或已过期."));//}
            MemberModel user;if (userType == 1) {user = MemberService.GetSingleByMobile(sndTo);}else if (userType == 2) {user = MemberService.GetSingleCleaningByMobile(sndTo);}else {throw new DsException("非法调用!");}if (type == 0) {if (user != null) {throw new DsException("该手机号码已注册,请更换!");}}else {if (user == null) {throw new DsException("未找到该手机号码的注册信息,请确认!");}}VerifyCodeService.SndVerifyCode(sndTo);return Json(ResultModel.Ok());}[Route("ValidCode"), AllowAnonymous]public JsonResult ValidCode(MemberRegisterModel model) {VerifyCodeService.IsValidCode(model.VerifyCode, model.Mobile);return Json(ResultModel.Ok());}

2、Sms
2.1、ISmsService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DS.JZB.Service.Sms {public interface ISmsService {/// <summary>/// 此方法发送的短信,不计入所在企业的扣费列表/// </summary>/// <param name="mobile">手机号</param>/// <param name="content">短信内容,不带标签</param>void SendValidateCodeSms(string mobile, object parameter);/// <summary>/// 此方法发送的短信,会计入所在企业的扣费列表/// </summary>void SendSms(string mobile, object parameter, string templateCode = null, string sign = SmsService.SMS_SIGN, int teamId = 0, int memberId = 0);/// <summary>/// 此方法发送的短信,会计入所在企业的扣费列表/// </summary>void SendSms(string[] mobiles, object parameter, string templateCode = null, string sign = SmsService.SMS_SIGN, int teamId = 0, int memberId = 0);}
}

2.2、SmsService.cs

using Dapper;
using Dapper.Contrib.Extensions;
using DS.JZB.Base;
using DS.JZB.Common;
using DS.JZB.Common.Extensions;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Sms.Model.V20170525;
using NLog;namespace DS.JZB.Service.Sms {public class SmsService : ISmsService {public const string SMS_SIGN = "服务名称";public const int FREE_SMS_COUNT = 0;public static readonly ISmsService Instance = new SmsService();private SmsService() { }public void SendSms(string mobile, object parameter, string templateCode, string sign = SMS_SIGN, int teamId = 0, int memberId = 0) {DoSendSms(mobile, parameter, sign, templateCode, teamId);}public void SendSms(string[] mobiles, object parameter, string templateCode, string sign = SMS_SIGN, int teamId = 0, int memberId = 0) {if(mobiles.Length == 1) {DoSendSms(mobiles[0], parameter, sign, templateCode, teamId);}else {foreach (var mobile in mobiles){DoSendSms(mobile, parameter, sign, templateCode, teamId);}}}public void SendValidateCodeSms(string mobile, object parameter) {DoSendSms(mobile, parameter, "服务名称", "SMS_XXXX", 0);}private void DoSendSms(string mobile, object parameter, string sign, string templateCode, int teamId) {if (parameter == null) {throw new DsException("请指定发送短信的内容");}if (string.IsNullOrWhiteSpace(mobile)) {throw new DsException("请指定短信的接收者");}try{string regionId = "cn-hangzhou";string signName = SMS_SIGN;string phoneNumbers = mobile;string templateParam = JsonConvert.SerializeObject(parameter);IClientProfile clientProfile = DefaultProfile.GetProfile(regionId, AliyunSmsConfig.Instance.AccessKeyId, AliyunSmsConfig.Instance.AccessKeySecret);DefaultProfile.AddEndpoint(regionId, regionId, "Dysmsapi", "dysmsapi.aliyuncs.com");IAcsClient acsClient = new DefaultAcsClient(clientProfile);SendSmsRequest request = new SendSmsRequest();request.SignName = signName;request.TemplateCode = templateCode;request.PhoneNumbers = phoneNumbers;request.TemplateParam = templateParam;SendSmsResponse response = acsClient.GetAcsResponse(request);if (response != null) {LogManager.GetCurrentClassLogger().Debug($"[SMS] {JsonConvert.SerializeObject(response)}");}}catch (ServerException e) {LogManager.GetCurrentClassLogger().Error(e, "[SMS] ServerException");}catch (ClientException e) {LogManager.GetCurrentClassLogger().Error(e, "[SMS] ClientException");}}private void CreateTeamSmsStatisticIfNotExists(int teamId, bool success, IDbConnection conn, IDbTransaction trans) {conn.Execute($@"IF NOT EXISTS(SELECT TOP 1 1 FROM TeamSmsStatistics WHERE TeamId=@TeamId AND StatisticalDate=@Now)
INSERT INTO [dbo].[TeamSmsStatistics]([TeamId],[StatisticalDate],[TotalSend],[SuccessSend],[FailedSend])
VALUES(@TeamId,@Now,1,{(success ? "1,0" : "0,1")})
ELSE
UPDATE TeamSmsStatistics SET TotalSend=TotalSend+1, {(success ? "SuccessSend=SuccessSend+1" : "FailedSend=FailedSend+1")} WHERE TeamId=@TeamId AND StatisticalDate=@Now", new {TeamId = teamId,Now = DateTime.Now.Date}, trans);}}
}

View Code

3、
5. Web返回顶部
0、web.config
<configuration><appSettings><add key="Aliyun:AccessKeyId" value="XXX" /><add key="Aliyun:AccessKeySecret" value="XXX" /><add key="Aliyun:EndpointManifestPath" value="D:\X\Web\App_Data\endpoints.xml" /><add key="Aliyun:AppCode" value="XXXX" /><add key="TLCert" value="D:\X\Web\App_Data\TLCert.cer" /></appSettings>
</configuration>

1、/m/js/shd.js

/**** 账号相关,登录,注册,找回密码* @type {{initLogin: initLogin, initRegister: initRegister, initForget: initForget}}*/var accountUi = {initLogin: function() {var userType = $.getUrlParam("t");if(!userType) {userType = 1;}if(userType !== 1) {$(".title").html("家政员登录")} else {$(".title").html("客户登录")}var ctype = $.getUrlParam("pwd");$(document).on("tap", "#btnLoginSys", function() {if(utils.isNull($("#LoginMobile").val())) {mui.toast("请输入手机号码!");return false;}if(!utils.isMobile($("#LoginMobile").val())) {mui.toast("您输入的不是有效的手机号");$("#LoginMobile").focus();return false;}if(utils.isNull($("#LoginPwd").val())) {mui.toast("请输入密码!");return false;}var param = {Mobile: $.trim($("#LoginMobile").val()),LoginPwd: CryptoJS.MD5($.trim($("#LoginPwd").val())).toString(),userType: userType};var btnObj = this;mui(btnObj).button("loading");utils.postRequest("member/login", param, function(d) {$.cookie("token", d.Data.Token);$.cookie("memberid", d.Data.User.Id);$.cookie("memberface", d.Data.User.FacePic);$.cookie("membername", d.Data.User.Name);if(userType == 1) {$.cookie("ctoken", "");$.cookie("mtoken", d.Data.Token);} else {$.cookie("ctoken", d.Data.Token);$.cookie("mtoken", "");}if(window.wechatHelper.isWeiXin()) {window.wechatHelper.wxEnvInit();setTimeout(function() {if(userType == 1) {mui.openWindow("/m/customer/index.html", "/m/customer/index.html");} else if(userType == 2) {mui.openWindow("/m/service/index.html", "/m/service/index.html");} else {mui.back();}}, 15);} else {//                        mui.back();if(userType == 1) {mui.openWindow("/m/customer/index.html", "/m/customer/index.html");} else if(userType == 2) {mui.openWindow("/m/service/index.html", "/m/service/index.html");} else {mui.back();}}}, true).always(function(d) {mui(btnObj).button("reset");});});$(document).on("tap", "#btnReg", function() {mui.openWindow("/register.html?t=" + userType, "/register.html?t=" + userType);});$(document).on("tap", "#aforget", function() {mui.openWindow("/forget.html?t=" + userType, "/forget.html?t=" + userType);});},initRegister: function() {var userType = $.getUrlParam("t");if(!userType) {userType = 1;}if(userType != 1) {$(".title").html("家政员立即注册");} else {$(".title").html("客户立即注册");}$(document).on("tap", "#btnGetCheckCode", function() {var p = {sndTo: $.trim($("#LoginMobile").val()),userType: userType};if(utils.isNull(p.sndTo) || !p.sndTo.length) {mui.toast("请输入手机号码");return false;}if(!utils.isMobile(p.sndTo)) {mui.toast("您输入的不是有效的手机号");return false;}var btnObj = this;mui(btnObj).button("loading");utils.postRequest("member/getverifycode", p, function(rev) {if(rev.IsError) {mui.toast(rev.Msg);$(btnObj).html("获取");} else {countDownEnable($(btnObj));//$("#btnNextReg").removeClass("mui-hidden");
                    }}, true, true).always(function(d) {if(d.IsError) {mui(btnObj).button("reset");}});});$(document).on("tap", "#btnRegComp", function() {if(utils.isNull($.trim($("#LoginMobile").val()))) {mui.toast("请输入手机号码");return false;}if(!utils.isMobile($.trim($("#LoginMobile").val()))) {mui.toast("您输入的不是有效的手机号");return false;}if(utils.isNull($.trim($("#VerifyCode").val()))) {mui.toast("请输入验证码");return false;}if(utils.isNull($.trim($("#LoginPwd").val()))) {mui.toast("请输入密码");return false;}var p = {Mobile: $.trim($("#LoginMobile").val()),LoginPwd: CryptoJS.MD5($.trim($("#LoginPwd").val())).toString(),VerifyCode: $.trim($("#VerifyCode").val()),userType: userType};var btnObj = this;mui(btnObj).button("loading");utils.postRequest("member/register", p, function(d) {mui.toast("注册成功!");setTimeout(function() {//mui.openWindow("/login.html?t=" + userType, "/login.html?t=" + userType);
                        mui.back();}, 500);}, true).always(function(d) {if(d.IsError) {mui(btnObj).button("reset");}});});},initForget: function() {var userType = $.getUrlParam("t");if(!userType) {userType = 1;}$(document).on("tap", "#btnGetCheckCode", function() {var p = {sndTo: $.trim($("#LoginMobile").val()),type: 1,userType: userType};if(utils.isNull(p.sndTo) || !p.sndTo.length) {mui.toast("请输入手机号码");return false;}if(!utils.isMobile(p.sndTo)) {mui.toast("您输入的不是有效的手机号");return false;}var btnObj = this;mui(btnObj).button("loading");utils.postRequest("member/getverifycode", p, function(rev) {if(rev.IsError) {mui.toast(rev.Msg);$(btnObj).html("获取");} else {countDownEnable($(btnObj));//$("#btnNextReg").removeClass("mui-hidden");
                    }}, true, true).always(function(d) {if(d.IsError) {mui(btnObj).button("reset");}});});$(document).on("tap", "#btnRegComp", function() {if(utils.isNull($.trim($("#LoginMobile").val()))) {mui.toast("请输入手机号码");return false;}if(!utils.isMobile($.trim($("#LoginMobile").val()))) {mui.toast("您输入的不是有效的手机号");return false;}if(utils.isNull($.trim($("#VerifyCode").val()))) {mui.toast("请输入验证码");return false;}if(utils.isNull($.trim($("#LoginPwd").val()))) {mui.toast("请输入密码");return false;}var p = {Mobile: $.trim($("#LoginMobile").val()),LoginPwd: CryptoJS.MD5($.trim($("#LoginPwd").val())).toString(),VerifyCode: $.trim($("#VerifyCode").val()),userType: userType};var btnObj = this;mui(btnObj).button("loading");utils.postRequest("member/resetpwd", p, function(d) {mui.toast("密码重置成功!");setTimeout(function() {//mui.openWindow("/login.html?t=" + userType, "/login.html?t=" + userType);
                        mui.back();}, 500);}, true).always(function(d) {if(d.IsError) {mui(btnObj).button("reset");}});});},initLocalRegister: function() {var params = {};//获取填写的第几页的注册数据function getRegisterData(id,page) {utils.getRequest("localteamOther/getsingle/{0}".format(id), {IsPlatform: $.getUrlParam("p") ? true : false},function (d) {if (!d.Data || !d.Data.localTeamInfo) {return false;}var localTeamInfo = d.Data.localTeamInfo;switch (page) {case 1:$("#LinkTel").val(localTeamInfo.LinkTel);if (!localTeamInfo.OpeningProvince) {$("#OpeningProvince").html('<span class="province"></span><span class="city"></span><span class="area"></span>');} else if (!localTeamInfo.OpeningTown) {$("#OpeningProvince").html('<span class="province">' + localTeamInfo.OpeningProvince + '</span><span class="city">' + localTeamInfo.OpeningCity + '</span><span class="area"></span>');} else {$("#OpeningProvince").html('<span class="province">' + localTeamInfo.OpeningProvince + '</span><span class="city">' + localTeamInfo.OpeningCity + '</span><span class="area">' + localTeamInfo.OpeningTown + '</span>');}$("#WorkAddress").val(localTeamInfo.WorkAddress);$("#Management").val(localTeamInfo.ManagementId);$("#InvitationNO").val(localTeamInfo.InvitationNO);break;case 2:$("[BusinessLicenseId].mui-btn-danger").attr("BusinessLicenseId", localTeamInfo.BusinessLicenseId);$("#BusinessLicenseName").val(localTeamInfo.BusinessLicenseName);//$("#UniformCreditNO").val(localTeamInfo.UniformCreditNO);$("#BusinessLicenseNO").val(localTeamInfo.BusinessLicenseNO);$("#LegalPerson").val(localTeamInfo.LegalPerson);if (!localTeamInfo.RegisterProvince) {$("#RegisterAdr").html('<span class="province"></span><span class="city"></span><span class="area"></span>');} else if (!localTeamInfo.RegisterTown) {$("#RegisterAdr").html('<span class="province">' + localTeamInfo.RegisterProvince + '</span><span class="city">' + localTeamInfo.RegisterCity + '</span><span class="area"></span>');} else {$("#RegisterAdr").html('<span class="province">' + localTeamInfo.RegisterProvince + '</span><span class="city">' + localTeamInfo.RegisterCity + '</span><span class="area">' + localTeamInfo.RegisterTown + '</span>');}$("#DetailAddress").val(localTeamInfo.DetailAddress);$("[BusinessTermId].mui-btn-danger").attr("BusinessTermId",localTeamInfo.BusinessTermId);$("#BusinessTermStart").val(utils.utcToLocal(localTeamInfo.BusinessTermStart,"yyyy-MM-dd"));$("#BusinessTermEnd").val(utils.utcToLocal(localTeamInfo.BusinessTermEnd,"yyyy-MM-dd"));$("#LinkMan").val(localTeamInfo.LinkMan);$("#CardNO").val(localTeamInfo.CardNO);$("#Email").val(localTeamInfo.Email);$("#LowQuality").val(localTeamInfo.LowQuality);break;case 3://$("#AccreditUrl").attr("src", localTeamInfo.AccreditUrl);if(utils.isNull(localTeamInfo.BusinessLicenseUrl)){$("#BusinessLicenseUrl").attr("src", "/img/mfsczp.jpg");}else {$("#BusinessLicenseUrl").attr("src", localTeamInfo.BusinessLicenseUrl);}break;case 4:if (utils.isNull(localTeamInfo.CardNOUrl_A)) {$("#CardNOUrl_A").attr("src", "/img/mfsczp.jpg");} else {$("#CardNOUrl_A").attr("src", localTeamInfo.CardNOUrl_A);}if (utils.isNull(localTeamInfo.CardNOUrl_B)) {$("#CardNOUrl_B").attr("src", "/img/mfsczp.jpg");} else {$("#CardNOUrl_B").attr("src", localTeamInfo.CardNOUrl_B);}break;case 5:if (utils.isNull(localTeamInfo.PersonCardUrl)) {$("#PersonCardUrl").attr("src", "/img/mfsczp.jpg");} else {$("#PersonCardUrl").attr("src", localTeamInfo.PersonCardUrl);}//$("#PermitUrl").attr("src", localTeamInfo.PermitUrl);break;}}, true);}//经营类目接口获取utils.getRequest("managementitem/list", {}, function(data) {$("#Management").empty().append("<option value=\"\">请选择经营类目</option>");$(data.Data.Collection).each(function(i, item) {$("#Management").append("<option value=\"" + item.Id + "\">" + item.Name + "</option>");});//获取首页注册的数据需要在获取经营类目完成后调用if ($.getUrlParam("p")) {if (!utils.isNull($.cookie("pid"))) {getRegisterData($.cookie("pid"), 1);}} else {if (!utils.isNull($.cookie("id"))) {getRegisterData($.cookie("id"), 1);}}}, true);utils.getRequest("bankitem/list", {}, function(data) {$("#BankItemId").empty().append("<option value=\"\">请选择开户行</option>");$(data.Data.Collection).each(function(i, item) {$("#BankItemId").append("<option value=\"" + item.Id + "\">" + item.Name + "</option>");});}, true);mui.previewImage();// utils.uploader({//     browse_button: "upAccreditUrl",//     completeCallback: function(pic) {//         $("#AccreditUrl").attr("src", pic);//     }// });
utils.uploader({browse_button: "upBusinessLicenseUrl",completeCallback: function(pic) {$("#BusinessLicenseUrl").attr("src", pic);}});utils.uploader({browse_button: "upCardNOUrl_A",completeCallback: function(pic) {$("#CardNOUrl_A").attr("src", pic);}});utils.uploader({browse_button: "upCardNOUrl_B",completeCallback: function(pic) {$("#CardNOUrl_B").attr("src", pic);}});utils.uploader({browse_button: "upPersonCardUrl",completeCallback: function(pic) {$("#PersonCardUrl").attr("src", pic);}});// utils.uploader({//     browse_button: "upPermitUrl",//     completeCallback: function(pic) {//         $("#PermitUrl").attr("src", pic);//     }// });
$(document).on("tap", "#nextStep", function() {//验证输入信息if(utils.isNull($("#LinkTel").val())) {mui.toast("请输入联系方式!");return false;}if(!utils.isMobile($("#LinkTel").val())) {mui.toast("请输入正确的联系方式!");return false;}if(utils.isNull($("#OpeningProvince").find(".province").html())) {mui.toast("请选择开通城市!");return false;}if(utils.isNull($("#WorkAddress").val())) {mui.toast("请输入办公地址!");return false;}if(utils.isNull($("#Management").val())) {mui.toast("请选择经营类目!");return false;}var btnObj = this;mui(btnObj).button("loading");params = {UserName: $.trim($("#LinkTel").val()),LinkTel: $.trim($("#LinkTel").val()),OpeningProvince: $.trim($("#OpeningProvince").find(".province").html()),OpeningCity: $.trim($("#OpeningProvince").find(".city").html()),OpeningTown: $.trim($("#OpeningProvince").find(".area").html()),WorkAddress: $("#WorkAddress").val(),ManagementId: $("#Management").val(),InvitationNO: $("#InvitationNO").val()};if ($.getUrlParam("p")) {params.IsPlatform = true; //是商家还是地方平台if (!utils.isNull($.cookie("pid"))) {params.Id = $.cookie("pid");}} else {params.IsPlatform = false; //是商家还是地方平台if (!utils.isNull($.cookie("id"))) {params.Id = $.cookie("id");}}utils.postRequest("localteamOther/insertinfo", params, function(d) {if($.getUrlParam("p")) {params.IsPlatform = true;$.cookie("pid",d.Data);} else {params.IsPlatform = false;$.cookie("id",d.Data);}viewApi.go("#zzxx");//获取第二页的数据if($.getUrlParam("p")) {if($.cookie("pid")){getRegisterData($.cookie("pid"),2);}} else {if($.cookie("id")){getRegisterData($.cookie("id"),2);}}}, true).always(function() {mui(btnObj).button("reset");});});$(document).on("tap", "#nextStep2", function() {//验证输入信息if(utils.isNull($("#BusinessLicenseName").val())) {mui.toast("请输入营业执照名称!");return false;}if(utils.isNull($("#BusinessLicenseNO").val())) {mui.toast("请输入营业执照注册号!");return false;}// if(utils.isNull($("#BusinessLicenseNO").val()) && utils.isNull($("#UniformCreditNO").val())) {//     mui.toast("营业执照注册号和统一社会信用代码至少填写一项!");//     return false;// }if(utils.isNull($("#LegalPerson").val())) {mui.toast("请输法定代表人!");return false;}if(utils.isNull($("#RegisterAdr").find(".province").html())) {mui.toast("请选择注册地址!");return false;}if(utils.isNull($("#DetailAddress").val())) {mui.toast("请输入执照上的住所/经营场所!");return false;}if($("[BusinessTermId].mui-btn-danger").attr("BusinessTermId") == 1) {if(utils.isNull($("#BusinessTermStart").val())) {mui.toast("请选择营业期限开始!");return false;}if(utils.isNull($("#BusinessTermEnd").val())) {mui.toast("请选择营业期限结束!");return false;}}if(utils.isNull($("#LinkMan").val())) {mui.toast("请输入指定联系人姓名!");return false;}if(utils.isNull($("#CardNO").val())) {mui.toast("请输入身份证号!");return false;}if(!utils.idCardNoUtil.checkIdCardNo($("#CardNO").val())) {mui.toast("输入身份证格式不正确,请检查!");return false;}var btnObj = this;mui(btnObj).button("loading");params = {};params = {BusinessLicenseId: $("[BusinessLicenseId].mui-btn-danger").attr("BusinessLicenseId"),BusinessLicenseName: $("#BusinessLicenseName").val(),//UniformCreditNO: $("#UniformCreditNO").val(),BusinessLicenseNO: $("#BusinessLicenseNO").val(),LegalPerson: $("#LegalPerson").val(),RegisterProvince: $.trim($("#RegisterAdr").find(".province").html()),RegisterCity: $.trim($("#RegisterAdr").find(".city").html()),RegisterTown: $.trim($("#RegisterAdr").find(".area").html()),DetailAddress: $("#DetailAddress").val(),BusinessTermId: $("[BusinessTermId].mui-btn-danger").attr("BusinessTermId"),BusinessTermStart: $("#BusinessTermStart").val(),BusinessTermEnd: $("#BusinessTermEnd").val(),LinkMan: $("#LinkMan").val(),CardNO: $("#CardNO").val(),Email: $("#Email").val(),LowQuality: $("#LowQuality").val()};if($.getUrlParam("p")) {params.IsPlatform = true;params.Id = $.cookie("pid");} else {params.IsPlatform = false;params.Id = $.cookie("id");}utils.postRequest("localteamOther/updateinfo", params, function(d) {viewApi.go("#zzxx2");//获取第3页的数据if($.getUrlParam("p")) {if($.cookie("pid")){getRegisterData($.cookie("pid"),3);}} else {if($.cookie("id")){getRegisterData($.cookie("id"),3);}}}, true).always(function() {mui(btnObj).button("reset");});});$(document).on("tap", "#nextStep3", function() {//验证输入信息// if($("#AccreditUrl").attr("src") == "/img/mfsczp.jpg") {//     mui.toast("请上传公司授权书!");//     return false;// }if($("#BusinessLicenseUrl").attr("src") == "/img/mfsczp.jpg") {mui.toast("请上传营业执照!");return false;}var btnObj = this;mui(btnObj).button("loading");params = {};params = {//AccreditUrl: $("#AccreditUrl").attr("src"),BusinessLicenseUrl: $("#BusinessLicenseUrl").attr("src")};if($.getUrlParam("p")) {params.IsPlatform = true; //是商家还是地方平台params.Id = $.cookie("pid");} else {params.IsPlatform = false; //是商家还是地方平台params.Id = $.cookie("id");}utils.postRequest("localteamOther/updateinfo2", params, function(d) {viewApi.go("#zzxx3");//获取第4页的数据if($.getUrlParam("p")) {if($.cookie("pid")){getRegisterData($.cookie("pid"),4);}} else {if($.cookie("id")){getRegisterData($.cookie("id"),4);}}}, true).always(function() {mui(btnObj).button("reset");});});$(document).on("tap", "#nextStep4", function() {//验证输入信息if($("#CardNOUrl_A").attr("src") == "/img/mfsczp.jpg") {mui.toast("请上传身份证正面!");return false;}if($("#CardNOUrl_B").attr("src") == "/img/mfsczp.jpg") {mui.toast("请上传身份证背面!");return false;}var btnObj = this;mui(btnObj).button("loading");params = {};params = {CardNOUrl_A: $("#CardNOUrl_A").attr("src"),CardNOUrl_B: $("#CardNOUrl_B").attr("src")};if($.getUrlParam("p")) {params.IsPlatform = true; //是商家还是地方平台params.Id = $.cookie("pid");} else {params.IsPlatform = false; //是商家还是地方平台params.Id = $.cookie("id");}utils.postRequest("localteamOther/updateinfo3", params, function(d) {viewApi.go("#zzxx4");//获取第5页的数据if($.getUrlParam("p")) {if($.cookie("pid")){getRegisterData($.cookie("pid"),5);}} else {if($.cookie("id")){getRegisterData($.cookie("id"),5);}}}, true).always(function() {mui(btnObj).button("reset");});});$(document).on("tap", "#nextStep5", function() {//验证输入信息if($("#PersonCardUrl").attr("src") == "/img/mfsczp.jpg") {mui.toast("请上传经营者手持身份证照!");return false;}// if($("#PermitUrl").attr("src") == "/img/mfsczp.jpg") {//     mui.toast("请上传许可资质证明!");//     return false;// }var btnObj = this;mui(btnObj).button("loading");params = {};params = {PersonCardUrl: $("#PersonCardUrl").attr("src")//PermitUrl: $("#PermitUrl").attr("src")
                };if($.getUrlParam("p")) {params.IsPlatform = true; //是商家还是地方平台params.Id = $.cookie("pid");} else {params.IsPlatform = false; //是商家还是地方平台params.Id = $.cookie("id");}utils.postRequest("localteamOther/updateinfo4", params, function (d) {viewApi.go("#skxx");}, true).always(function () {mui(btnObj).button("reset");});});$(document).on("tap", "#nextStep6", function() {if(utils.isNull($("#BankCardNO").val())) {mui.toast("请输入银行卡号!");return false;}//if (!utils.luhmCheck($("#BankCardNO").val())) {//    mui.toast("输入银行卡号格式不正确,请检查!");//    return false;//}if(utils.isNull($("#AccountName").val())) {mui.toast("请输入开户名!");return false;}if(utils.isNull($("#BankItemId").val())) {mui.toast("请选择开户行!");return false;}if(utils.isNull($("#BankBranchName").val())) {mui.toast("请输入支行!");return false;}if(utils.isNull($("#Bank").find(".province").html())) {mui.toast("请选择开户行所在地!");return false;}//验证输入信息 递交数据到服务器var params = {UserName: $.trim($("#LinkTel").val()),LinkTel: $.trim($("#LinkTel").val()),OpeningProvince: $.trim($("#OpeningProvince").find(".province").html()),OpeningCity: $.trim($("#OpeningProvince").find(".city").html()),OpeningTown: $.trim($("#OpeningProvince").find(".area").html()),WorkAddress: $("#WorkAddress").val(),ManagementId: $("#Management").val(),BusinessLicenseId: $("[BusinessLicenseId].mui-btn-danger").attr("BusinessLicenseId"),BusinessLicenseName: $("#BusinessLicenseName").val(),//UniformCreditNO: $("#UniformCreditNO").val(),BusinessLicenseNO: $("#BusinessLicenseNO").val(),LegalPerson: $("#LegalPerson").val(),RegisterProvince: $.trim($("#RegisterAdr").find(".province").html()),RegisterCity: $.trim($("#RegisterAdr").find(".city").html()),RegisterTown: $.trim($("#RegisterAdr").find(".area").html()),DetailAddress: $("#DetailAddress").val(),BusinessTermId: $("[BusinessTermId].mui-btn-danger").attr("BusinessTermId"),BusinessTermStart: $("#BusinessTermStart").val(),BusinessTermEnd: $("#BusinessTermEnd").val(),LinkMan: $("#LinkMan").val(),CardNO: $("#CardNO").val(),Email: $("#Email").val(),LowQuality: $("#LowQuality").val(),//AccreditUrl: $("#AccreditUrl").attr("src"),BusinessLicenseUrl: $("#BusinessLicenseUrl").attr("src"),PersonCardUrl: $("#PersonCardUrl").attr("src"),//PermitUrl: $("#PermitUrl").attr("src"),CardNOUrl_A: $("#CardNOUrl_A").attr("src"),CardNOUrl_B: $("#CardNOUrl_B").attr("src"),AccountTypeId: $("[AccountTypeId].mui-btn-danger").attr("AccountTypeId"),AccountName: $("#AccountName").val(),BankCardNO: $("#BankCardNO").val(),BankProvince: $.trim($("#Bank").find(".province").html()),BankCity: $.trim($("#Bank").find(".city").html()),//BankTown:$.trim($("#Bank").find(".area").html()),BankItemId: $("#BankItemId").val(),BankBranchName: $("#BankBranchName").val(),InvitationNO: $("#InvitationNO").val()};if($.getUrlParam("p")) {params.IsPlatform = true; //是商家还是地方平台params.Id = $.cookie("pid");} else {params.IsPlatform = false; //是商家还是地方平台params.Id = $.cookie("id");}var btnObj = this;mui(btnObj).button("loading");utils.postRequest("localteamOther/register", params, function() {viewApi.go("#skxx2");//这时候需要把保存的信息清掉if($.getUrlParam("p")) {$.cookie("pid","");} else {$.cookie("id","");}}, true).always(function(d) {mui(btnObj).button("reset");});});$(document).on("tap", "#nextStep7", function() {mui.openWindow("/index.html", "/index.html");});mui.ready(function() {/*** 获取对象属性的值* 主要用于过滤三级联动中,可能出现的最低级的数据不存在的情况,实际开发中需要注意这一点;* @param {Object} obj 对象* @param {String} param 属性名*/var _getParam = function(obj, param) {return obj[param] || '';};var nativePlacePicker = new mui.PopPicker({layer: 3});nativePlacePicker.setData(cityData3);$(document).on("tap", "#OpeningProvince,#RegisterAdr", function() {var obj = $(this);nativePlacePicker.show(function(items) {//                        obj.html('<span class="province">' + _getParam(items[0], 'text') + '</span><span class="city">' + _getParam(items[1], 'text') + '</span>');obj.html('<span class="province">' + _getParam(items[0], 'text') + '</span><span class="city">' + _getParam(items[1], 'text') + '</span><span class="area">' + _getParam(items[2], 'text') + '</span>');var Openparams = {}Openparams.Province = $.trim($("#OpeningProvince").find(".province").html());Openparams.City = $.trim($("#OpeningProvince").find(".city").html());Openparams.Town = $.trim($("#OpeningProvince").find(".area").html());utils.getRequest("localteamOther/IsExist", Openparams, function(d) {if(d.Data == true) {if($.getUrlParam("p")) {mui.toast("该城市已存在地方平台,请选择其他城市!");}} else {if($.getUrlParam("p")) {} else {mui.toast("该城市暂无地方平台,请选择其他城市!");}}}, true);});});var cityPicker = new mui.PopPicker({layer: 2});cityPicker.setData(cityData);$(document).on("tap", "#Bank", function() {var obj = $(this);cityPicker.show(function(items) {obj.html('<span class="province">' + _getParam(items[0], 'text') + '</span><span class="city">' + _getParam(items[1], 'text') + '</span>');});});$(document).on("tap", "[BusinessLicenseId]", function() {$("[BusinessLicenseId]").removeClass("mui-btn-danger").removeClass("mui-btn-outlined");$(this).addClass("mui-btn-danger").addClass("mui-btn-outlined");});$(document).on("tap", "[BusinessTermId]", function() {$("[BusinessTermId]").removeClass("mui-btn-danger").removeClass("mui-btn-outlined");$(this).addClass("mui-btn-danger").addClass("mui-btn-outlined");if($("[BusinessTermId].mui-btn-danger").attr("BusinessTermId") == 2) {$("#BussinessTime").addClass("hide");} else {$("#BussinessTime").removeClass("hide");}});$(document).on("tap", "[AccountTypeId]", function() {$("[AccountTypeId]").removeClass("mui-btn-danger").removeClass("mui-btn-outlined");$(this).addClass("mui-btn-danger").addClass("mui-btn-outlined");});$("#BusinessTermStart").mobiscroll().date({theme: "", // Specify theme like: theme: 'ios' or omit setting to use defaultmode: "scroller", // Specify scroller mode like: mode: 'mixed' or omit setting to use defaultdisplay: "center", // Specify display mode like: display: 'bottom' or omit setting to use defaultlang: "zh", // Specify language like: lang: 'pl' or omit setting to use defaultdateFormat: "yy-mm-dd"});$("#BusinessTermEnd").mobiscroll().date({theme: "", // Specify theme like: theme: 'ios' or omit setting to use defaultmode: "scroller", // Specify scroller mode like: mode: 'mixed' or omit setting to use defaultdisplay: "center", // Specify display mode like: display: 'bottom' or omit setting to use defaultlang: "zh", // Specify language like: lang: 'pl' or omit setting to use defaultdateFormat: "yy-mm-dd", // 日期格式max: new Date(new Date().getFullYear() + 100, 11, 31)});});}};window.accountUi = accountUi;

View Code

2、
6.返回顶部
7.返回顶部
8.返回顶部
9.返回顶部
10.返回顶部
11.返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/storebook/p/8567763.html

Modules:手机号码验证相关推荐

  1. VUE 一个或多个邮箱以及手机号码验证,多个邮箱和手机号重复校验

    1.一个或多个邮箱以及手机号码验证,不会删选重复的邮箱或者手机号 如图,VUE项目中验证一个或者多个邮箱和电话号码 中间用","隔开,在vue的data{}下面编写验证的正则表达式 ...

  2. react实现手机号码验证

    Regular.jsx import React from "react"; class Regular extends React.Component{constructor() ...

  3. 互联网金融:为什么贷前风控需要进行手机号码验证(联通、移动、电信)

    在进行贷前风控时,国内的互联网借贷平台大都要求进行手机号码验证(电信运营商验证),验证方式为:通过用户输入的手机号.运营商服务密码,获取用户的通话记录等信息,之后通过数据分析为借款人提供一定的授信额度 ...

  4. php两个手机号正则表达式_php 手机号码验证正则表达式

    php 手机号码验证正则表达式 比较简洁的代码一: $str = ''; $isMatched = preg_match('/^0?(13|14|15|17|18)[0-9]{9}$/', $str, ...

  5. 手机号码验证--区号验证--电话号验证--分机号验证--手机号和固定电话二选一--用户名只能为汉字或者英文请--邮箱账号...

    // 手机号码验证jQuery.validator.addMethod("isPhoneNumber", function(value, element) {var tel = / ...

  6. html 正则手机号,js正则表达式之手机号码验证

    js正则表达式之手机号码验证2017-09-03 11:10 在填写表单的时候,对手机号码进行验证,是用得最多的地方. 你看不管你是app注册,还是论坛注册一个会员,都得用到手机号码. 而且现在互联网 ...

  7. js手机号码验证以及隐藏中间四位数字

    愚人节要上班,一点要放小长假的感觉都没有,清明三天本来打算去爬黄山,公司通知说是4.15号去春游,要徒步15公里,我有点心疼我的腿,想想还是放弃了黄山行. 夏天就要来了,从去年夏天来上海开始工作后,我 ...

  8. 最新手机号码验证正则表达式

    转自:最新手机号码验证正则表达式js版 由于手机号段的不断更新,以前的正则表达式已经无法满足需求.重新编写这条表达式,号段资料来源依据:http://www.jihaoba.com/tools/hao ...

  9. AxureRP8实战手册-案例27(字符串函数:手机号码验证①)

    案例50. 字符串函数:手机号码验证(1) 案例来源: 360-个人中心-详细资料 案例效果:(图4-131) 案例描述: 原网站中通过点击保存修改按钮触发验证,另外验证结果的提示也有弹出和页面上显示 ...

最新文章

  1. Equifax再陷风波:一门户网站管理员密码是admin/admin
  2. Delphi开发的IOCP测试Demo以及使用说明。
  3. DS博客作业08--课程总结
  4. OpenStack安装过程备忘
  5. java 应用程序的打包发行
  6. 1w存银行一年多少利息_利息能拿上万?银行行长:20万存款这样存,一年躺着白白赚一万!...
  7. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
  8. shell 脚本初习
  9. Django之中间件,csrf跨站伪造请求,auth认证模块
  10. 9-3-斐波那契查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
  11. ai里怎样取消扩展外观_扩展AI:困难的5个原因
  12. 一个功能块实现PLC与安川机器人以太网通讯
  13. 摘 :史丰收快速计算法的口诀及其简单应用方法(部分)
  14. Android各种屏幕尺寸
  15. 【python】numpy库np.percentile详解
  16. 快看快看,这款免费的低代码平台绝绝子
  17. 完美修改证件照背景详细步骤,可以消除边界处的白边或者红边
  18. html字体加粗效果不明显,css去除粗体_去掉加粗样式图文实例教程
  19. 关于video++,jsrun,有道笔记等的感想
  20. 计算机考验数学 英语分数要求,2020考研数学一110分,能过985大学复试线?通过这3所大学来预测...

热门文章

  1. Java经典实例代码
  2. iPhone手机忘记密码锁
  3. js用正则去除字符串空格
  4. canvas牛奶液体底部动画js特效
  5. javaweb(http、servlet、maven、过滤器、拦截器)
  6. 基于 Redis Stream 的消息队列
  7. 用ps画一个邪恶写轮眼!
  8. 一个IO的传奇一生(10)-- CFQ调度算法
  9. Python编程--解压缩文件
  10. 分享一个网址 上面的 python 库比官网还全........ .