C# Ajax 手机发送短信验证码 校验验证码 菜鸟级别实现方法

1.Ajax请求处理页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.Services;

namespace Web.User.Ajax
{
    /// <summary>
    /// SendCheckcode 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class SendCheckcode : IHttpHandler, IRequiresSessionState
    {
        //发送验证码
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string arrMobile = context.Request.Form["ajaxdata"].ToString();
            string[] strMobile = arrMobile.Split(‘,‘);
            string yzm = new Random().Next(999999).ToString();

            context.Session["MobileYzm"] = yzm;

            //如果是手机号登录
            string strReg = @"^((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)";
            bool IsMobile = BLL.HSSM_Public.PublicRegex(strReg, arrMobile);
            bool b = false;

            if (IsMobile)
                b = BLL.HSSM_Public.SendSMS(strMobile, yzm);
            else
            {
                Model.EmailTabModel etm = new Model.EmailTabModel();
                etm.Email = arrMobile;
                b = BLL.HSSM_Public.SendEmail(etm, "", 919068484,"邮箱注册验证码","当前注册验证码为:["+yzm+"]", 0);//发送邮件
            }

            if (b)
                context.Response.Write("0");
            else
                context.Response.Write("发送失败!");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

接收通过Jquery的Ajax请求传来的参数,进行处理,此处是接收手机号码还是邮箱地址,然后向这个手机号码或邮箱地址发送短信或邮件验证码

2.填写手机号和验证码:

<div class="Con">
                    <ul>
                        <li class="left">输入手机号码:</li><li class="right">
                            <input id="txtMobile" runat="server" type="text" class="Text"/><input
                                id="btnGetYzm" runat="server" type="button" class="hyzm" value="获取验证码" />

                        </li>
                    </ul>
                    <ul>
                        <li class="left">验证码:</li><li class="right">
                            <input id="txtChkCode" runat="server" type="text" class="Text"/></li>
                        <li id="liCheckCode" runat="server" class="ts">* 请输入手机收到的验证码。如果一段时间没有收到,请&nbsp;<a
                            id="aGetChkCodeAgain" style="cursor: pointer;" class="a1">重新获取</a></li>
                    </ul>
</div>

填写手机号码,验证是否填写正确以及触发发送验证码到该手机的方法,手机接收到验证码后填写进行验证验证码的有效性

3.发送验证码:

$(function () {
            $("#btnGetYzm,#aGetChkCodeAgain").bind("click", function () {
                if (mobileResult == true) {
                    /****************************发送验证码到手机************************/
                    $.ajax({
                        type: "POST",
                        url: "../User/Ajax/SendCheckcode.ashx?r=" + Math.random(),
                        data: { ajaxdata: $("#txtMobile").val() },
                        async: false,
                        success: function (msg) {
                            if (msg != 0) {
                                $("#liCheckCode").html(msg);
                                $("#liCheckCode").css("color", "red");
                                result = false;
                            }
                            else {
                                $("#liCheckCode").html("手机号验证通过");
                                $("#liCheckCode").css("color", "green");
                                result = true;
                            }
                        },
                        error: function (xhr) {
                            $("#liCheckCode").html("Error:" + xhr.status + " " + xhr.statusText);
                            $("#liCheckCode").css("color", "red");

                            result = false;
                        }
                    });
                    /****************************end************************/
                    count = 30;
                    GetYzm();
                    return true;
                }
                else {
                    //手机号验证
                    VerifyCheck($("#txtMobile"), $("#liCheckCode"), "请输入正确的手机号!", /^((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)/, "手机号不合法!", "../User/Ajax/ExistsMobile.ashx");
                    return false;
                }
            });

页面加载时设置点击"发送验证码"按钮请求Ajax页面,Ajax页面生成验证码发送到手机端,发送之后设置按钮文字时间倒计时效果,如果手机号验证未通过将继续验证,验证通过后才能发送

4.验证手机号和验证码:

var result = false;
        var mobileResult = false;
        var retMobile = false; //手机号验证是否通过
        var retChkCode = false; //填写的手机接收的验证码是否通过
        //表单元素验证,txt:要验证的文本值;div:文本验证信息层;divmsg:文本验证消息;
        //reg:正则式;regmsg:正则式验证消息;ajaxurl:文本值有效性请求验证页面;divhtml:验证返回消息
        function VerifyCheck(txt, div, divmsg, reg, regmsg, ajaxurl) {
            if ($.trim(txt.val()) == "") {//判断文本框是否填写
                div.html(divmsg);
                div.css("color", "red");
                return false;
            }
            else {
                if (reg != null && !reg.test(txt.val())) {//判断是否输入合法字符
                    div.html(regmsg);
                    div.css("color", "red");
                    return false;
                }
                else {
                    /****************************检查文本输入值是否可用************************/
                    $.ajax({
                        type: "POST",
                        url: ajaxurl + "?r=" + Math.random(),
                        data: { ajaxdata: txt.val() },
                        async: false,
                        success: function (msg) {
                            if (msg != 0) {
                                div.html(msg);
                                div.css("color", "red");
                                result = false;
                            }
                            else {
                                div.css("color", "green");
                                if (divmsg == "请输入正确的手机号!") {
                                    mobileResult = true;
                                }
                                if (ajaxurl == "../User/Ajax/ExistsMobile.ashx") {
                                    div.html("手机号输入正确");
                                    retMobile = true;
                                }
                                if (ajaxurl == "../User/Ajax/ExistsMobileYzm.ashx") {
                                    div.html("验证码输入正确");
                                    retChkCode = true;
                                }

                                result = true;
                            }
                        },
                        error: function (xhr) {
                            div.html("Error:" + xhr.status + " " + xhr.statusText);
                            div.css("color", "red");
                            result = false;
                        }
                    });
                    return result;
                    /****************************end************************/
                }
            }
        }

        //设置发送验证码的按钮的倒计时效果
        var count = 30;
        function GetYzm() {
            $("#btnGetYzm").attr("disabled", "disabled");
            $("#btnGetYzm").val(count + "秒之后重新获取")
            count--;
            if (count > 0) {
                setTimeout(GetYzm, 1000);
            }
            else {
                $("#btnGetYzm").val("获取验证码");
                $("#btnGetYzm").attr("disabled", false);
            }
            return result;
        }

请求Ajax页面验证手机号和验证码是否输入正确

4.判断手机号格式(是否合法,是否可用):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Web.User.Ajax
{
    /// <summary>
    /// ExistsMobile 的摘要说明
    /// </summary>
    public class ExistsMobile : IHttpHandler
    {
        //检测手机号是否已经注册
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string Mobile = string.Empty;
            if (context.Request.Form["ajaxdata"] == null)
            {
                context.Response.Write("手机号不能为空!");
                return;
            }
            Mobile = context.Request.Form["ajaxdata"].ToString();
            if (!BLL.HSSM_Public.PublicRegex(@"^((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)", Mobile))
            {
                context.Response.Write("手机号格式非法!");
                return;
            }
            if (BLL.HSSM_Public_DB.IsRecord("Users", string.Format(" Mobile=‘{0}‘", Mobile)))
            {
                context.Response.Write("该手机号["+Mobile+"]已被注册!");
            }
            else
            {
                context.Response.Write("0");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

检验手机号是否填写,是否合法,是否可用

5.判断验证码格式:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.Services;

namespace Web.User.Ajax
{
    /// <summary>
    /// ExistsMobileYzm 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class ExistsMobileYzm : IHttpHandler, IRequiresSessionState //就是这样显示的实现一下,不用实现什么方法
    {
        /// <summary>
        /// 检测验证码是否输入正确
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string CheckCode = string.Empty;
            string SessionCheckcode = null != context.Session["MobileYzm"] ? context.Session["MobileYzm"].ToString() : string.Empty;

            if (String.IsNullOrEmpty(SessionCheckcode))
            {
                context.Response.Write("请您先获取验证码!");
                return;
            }
            if (context.Request.Form["ajaxdata"] == null)
            {
                context.Response.Write("请输入手机收到的验证码,如果一段时间没有收到,请&nbsp;<a id=‘aGetChkCodeAgain‘ href=‘#‘ class=‘a1‘>重新获取</a>");
                return;
            }

            CheckCode = context.Request.Form["ajaxdata"].ToString();

            if (String.IsNullOrEmpty(SessionCheckcode))
                context.Response.Write("验证码超时失效!");
            else if (CheckCode != SessionCheckcode)
                context.Response.Write("验证码输入错误!");
            else
                context.Response.Write("0");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

检验验证码是否填写,是否超时,是否输入正确

转载原文:http://www.cnblogs.com/gawking/p/3518815.html

时间: 2024-10-16 06:43:18

C# Ajax 手机发送短信验证码 校验验证码 菜鸟级别实现方法的相关文章

Jquery手机发送短信之后,进入倒计时状态

在做手机网站开发的时候,难免发生意外.这时候,就是你展示人格魅力的时候啦! 下面是自己写的一个发送验证码给手机之后,进入的一个倒计时的效果 js代码,我可是连<script type="text/javascript">这种都贴出来啦! <script type="text/javascript"> var InterValObj; var count = 60; var curCount; function sendMessage() {

Android之发送短信和接收验证码

最近项目需求需要发送短信和接收验证码并将验证码显示在输入框中 以下是我的记录 前提---权限 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <

GSM猫或者手机发送短信SMSLib

SMSLib是一个由很多程序员共同开发的,用于支持GSM猫或者手机发送短信的开源项目.SMSLib也同样支持一些短信运营商. smslib是Apache的一个开源项目,有.NET和Java两个版本.现在最新稳定版本为3.5.2.

使用中国网建实现Java向手机发送短信的功能

公司需要使用向指定手机发送验证码的功能,在网上搜了一下,有使用'短信猫'的,有使用WebService的,有使用第三方的,我使用的是中国网建提供的API来实现: 中国网建注册送五条短信和三条彩信做测试,这就足够了,今天公司刚买了几千条做测试! 首先是编码的选择: GBK编码发送接口地址: http://gbk.sms.webchinese.cn/?Uid=本站用户名&Key=接口安全秘钥&smsMob=手机号码&smsText=验证码:8888 UTF-8编码发送接口地址: htt

GSM开发 手机发送短信控制LED,返回中文短信,C程序源代码【测试】

[谢绝转载!][谢绝转载!][谢绝转载!] [说明] 实物连接图如下: [短信控制] 发送短信到GSM模块,收到相应的指令对应板子上的灯亮灭. 然后模块会向手机发送一条中文短信 [源代码]目前仍然处于开发中..... /****************************** 工程名  :短信控制家电 1 先用USB转TTL模块测试模块好用,并修改波特率到9600(AT+IPR=9600)再用单片机调试 2 51单片机晶振 11.0592MHz,12M不可以用   3 如果模块无开机自启动电

双卡手机发送短信 - 坑爹的双卡双待

近期要写一个Android app.当中一个功能要发短信,直接照抄Android API Demos的样例OS\SMS Messaging,在自己的手机上測试.发现总是报错SmsManager.RESULT_ERROR_NO_SERVICE,理解不能. 于是開始Google. 发现网上非常少有人提到这个错误,并且Android上发短信,所有都是用的API Demos的发短信的样例,或者使用Intent调用系统短信App来发短信.尽管用Intent调用系统短信App来发短信也能够当作一个workr

使用Python往手机发送短信(基于twilio模块)

官网是https://www.twilio.com twilio的一句话介绍——提供SDK帮你连接世界上所有人,你可以很方便的调用他们提供的接口来给指定手机发短信,打电话. 首先在twilio的官网注册一个试用账号,过程中需要绑定你的手机,然后获得免费的twilio号码,从你的账户界面(dsahboard)就可以看到ACCOUNT SID和AUTH TOKEN了,以及给你的Phone Number. 试用账号会赠送$15,只有1个Phone Number,只可以给注册的手机号发送短信,每发一条短

iPhone 手机发送短信,报告“尚未送达”

情况: iPhone手机,发送短信报告"尚未送达" 发送iMessage没有问题 可以接收短信 修复过程(按顺序执行): 查询方法:用iPhone拨打#50057672# 删除方法:用iPhone拨打##5005*7672# 设置方法:用iPhone拨打50057672+86"SIM卡归属地短信中心号码"# ,例如北京的是50057672+8613010112500# "+"是长按0输入的 重启手机,测试. 原文地址:https://blog.5

【转】android 手机发送短信,震动,播放默认铃声

发送短信 @SuppressWarnings("deprecation") public void sendMessage(String phoneNo, String messageContent) {          SmsManager smsManager = SmsManager.getDefault();          smsManager.sendTextMessage(phoneNo,// 接收方的手机号码