ASP.NET MVC+Bootstrap 实现短信验证

短信验证大家都已经很熟悉了,基本上每天都在接触手机短信的验证码,比如某宝,某东购物,网站注册,网上银行等等,都要验证我们的手机号码真实性。这样做有什么好处呢。

以前咱们在做网站的时候,为了提高用户注册的质量,防止用户恶意注册,都会设置一些小阻碍,如网页验证码、邮件认证等等。但是道高一尺魔高一丈,很快网站的这些设置都被一些网络黑客利用注册机逐一攻破,这些功能也就随之变成了摆设。

但是魔高一丈道高两丈,随着移动设备的普及,短信验证的功能横空出世。他的出现轻松的排除了传统网站验证码的弊端,还提升了网站用户注册的质量,并且可以更有效的管理网站注册用户,随时与之保持联系和沟通。另外,用户的手机号码还可以做绑定,衍生出更多的应用,比如手机密码找回,手机发送指令,手机帐号和用户注册帐号可做同步登录、同步通讯录、同步更多手机相关的应用等。

手机短信验证,听上去很复杂的样子,但是看完下面这个图你就会恍然大悟!

原理图:

其原理就是,当用户在网站上注册的时候,系统会要求用户输入自己的手机号码,点击发送验证码时,系统会调用第三方短信平台提供的接口,将用户手机号码和系统自动生成的验证码,提供给平台,然后由平台将短信验证码发送至用户的手机。当然系统在调用接口之前,会将生成的验证码保存至缓存一份;用户收到验证码后输入对话框,提交后系统验证用户输入的和缓存中保存的验证码是否一致,一致方可完成注册。


Demo

所用工具:Bootstrap框架,ASP.NET MVC,天下畅通平台接口。



@{
    ViewBag.Title = "Index";
}
<link href="../../Content/bootstrap-3.3.0-dist/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="../../Content/bootstrap-3.3.0-dist/dist/js/jquery-1.11.2.min.js"></script>
<script src="../../Content/bootstrap-3.3.0-dist/dist/js/bootstrap.min.js"></script>
<script src="../../Scripts/MyScripts/Register.js"></script>

<div class="hero-unit" contenteditable="true">
    <h1>某网站注册</h1>
    <p>学的不仅是技术,更是梦想!</p>
    <p>
        再牛逼的梦想,也抵不住你傻逼似的坚持!
    </p>
</div>

<br>
<br>
<br>
<br>
<br>

<form class="form-horizontal" role="form">
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">手机号</label>
        <div class="col-sm-6">
            <div style="float: left;">
                <input id="phonum" type="text" class="form-control" style="width: 300px;">
            </div>
            <div style="float: left;">
                <input class="btn btn-info" type="button" id="getcode" value="点击获取手机验证码" />
                <span id="telephonenameTip"></span>
            </div>
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-2 control-label">验证码</label>
        <div class="col-sm-6">
            <input style="width: 300px;" class="form-control" id="codename">
            <span id="codenameTip"></span>
        </div>
    </div>

    <div class="form-group">
        <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
        <div class="col-sm-6">
            <input type="password" style="width: 300px;" class="form-control" id="" placeholder="Password">
        </div>
    </div>

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-6">
            <button type="button" id="submit" class="btn btn-primary">立即注册</button>
        </div>
    </div>
</form>


JS Code


/*************************************************
作者: 牛迁迁
小组:
说明:短信验证所用到的JS方法,此实例仅作为Demo,一些验证暂时省略。
创建日期:2015年8月11日 17:55:40
版本号:V1.0.0
**********************************************/

window.onload = function () {

    //短信验证码
    var InterValObj; //timer变量,控制时间
    var count = 60; //间隔函数,1秒执行
    var curCount;//当前剩余秒数
    var code = ""; //验证码
    var codeLength = 6;//验证码长度   

    $("#getcode").click(function () {

        //获取输入的手机号码
        var phoNum = $("#phonum").val();
        //alert(phoNum);
        curCount = count;

        //用正则表达式验证手机号是否合法
        //var re = /(^1[3|5|8][0-9]{9}$)/;
        //略
        // 产生随记验证码
        for (var i = 0; i < codeLength; i++) {
            code += parseInt(Math.random() * 9).toString();
        }

        // 设置按钮显示效果,倒计时
        $("#getcode").attr("disabled", "true");
        $("#getcode").val("请在" + curCount + "秒内输入验证码");
        InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次    

        // 向后台发送处理数据
        $.ajax({
            type: "POST", // 用POST方式传输
            dataType: "text", // 数据格式:JSON
            url: "/Register/GetCode", // 目标地址
            data: { "Code": code, "phoNum": phoNum },
            error: function (msg) {
                alert(msg);
            },
            success: function (data) {
                //前台给出提示语
                if (data == "true") {
                    $("#telephonenameTip").html("<font color=‘#339933‘>√ 短信验证码已发到您的手机,请查收(30分钟内有效)</font>");
                } else if (data == "false") {
                    $("#telephonenameTip").html("<font color=‘red‘>× 短信验证码发送失败,请重新发送</font>");
                    return false;
                }
            }
        });

    });

    //timer处理函数
    function SetRemainTime() {
        if (curCount == 0) {
            window.clearInterval(InterValObj);// 停止计时器
            $("#getcode").removeAttr("disabled");// 启用按钮
            $("#getcode").val("重新发送验证码");
            code = ""; // 清除验证码。如果不清除,过时间后,输入收到的验证码依然有效
        } else {
            curCount--;
            $("#getcode").val("请在" + curCount + "秒内输入验证码");
        }
    }

    //提交注册按钮
    $("#submit").click(function () {
        var CheckCode = $("#codename").val();
        // 向后台发送处理数据
        $.ajax({
            url: "/Register/CheckCode",
            data: { "CheckCode": CheckCode },
            type: "POST",
            dataType: "text",
            success: function (data) {
                if (data == "true") {
                    $("#codenameTip").html("<font color=‘#339933‘>√</font>");
                } else {
                    $("#codenameTip").html("<font color=‘red‘>× 短信验证码有误,请核实后重新填写</font>");
                    return;
                }
            }
        });
    });
}


Controller Code


    public class RegisterController : Controller
    {

        //短信验证码接口的测试数据(天下畅通平台给参数)
        public static String url = "http://xtx.telhk.cn:8080/sms.aspx";
        public static String userid = "****";
        public static String account = "****";
        public static String password = "****";

        public ActionResult Index()
        {
            return View();
        }

        #region GetCode()-获取验证码-牛迁迁-2015年8月8日 11:12:37
        /// <summary>
        /// 返回json到界面
        /// </summary>
        /// <returns>string</returns>
        public ActionResult GetCode()
        {
            try
            {
                bool result;
                //接收前台传过来的参数。短信验证码和手机号码
                string code = Request["Code"];
                string phoNum = Request["phoNum"];

                // 短信验证码存入session(session的默认失效时间30分钟)
                //也可存入Memcached缓存
                Session.Add("code", code);

                // 短信内容+随机生成的6位短信验证码
                String content = "【欢迎注册今日开讲】 您的注册验证码为:" + code + ",如非本人操作请忽略。有疑问请联系我们:http://blog.csdn.net/u010028869";

                // 单个手机号发送短信
                if (!SendMessage(content, phoNum, url, userid, password, account))
                {
                    result = false;// 失败
                }
                else
                {
                    result = true;// 成功
                }
                return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        /// <summary>
        /// 核心功能-短信发送方法
        /// </summary>
        /// <param name="content">短信内容</param>
        /// <param name="phoNum">手机号码</param>
        /// <param name="url">请求地址</param>
        /// <param name="userid">企业id</param>
        /// <param name="password">密码</param>
        /// <param name="account">用户帐号</param>
        /// <returns>bool 是否发送成功</returns>
        public bool SendMessage(string content, string phoNum, string url, string userid, string password, string account)
        {
            try
            {
                Encoding myEncoding = Encoding.GetEncoding("UTF-8");
                //按照平台给定格式,组装发送参数 包括用户id,密码,账户,短信内容,账户等等信息
                string param = "action=send&userid=" + userid + "&account=" + HttpUtility.UrlEncode(account, myEncoding) + "&password=" + HttpUtility.UrlEncode(password, myEncoding) + "&mobile=" + phoNum + "&content=" + HttpUtility.UrlEncode(content, myEncoding) + "&sendTime=";

                //发送请求
                byte[] postBytes = Encoding.ASCII.GetBytes(param);
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
                req.ContentLength = postBytes.Length;

                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(postBytes, 0, postBytes.Length);
                }

                System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
                //获取返回的结果
                using (WebResponse wr = req.GetResponse())
                {
                    StreamReader sr = new StreamReader(wr.GetResponseStream(), System.Text.Encoding.UTF8);
                    System.IO.StreamReader xmlStreamReader = sr;
                    //加载XML文档
                    xmlDoc.Load(xmlStreamReader);
                }
                //解析XML文档,进行相应判断
                if (xmlDoc == null)
                {
                    return false;
                }
                else
                {
                    String message = xmlDoc.GetElementsByTagName("message").Item(0).InnerText.ToString();
                    if (message == "ok")
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        #region CheckCode()-检查验证码是否正确-牛迁迁-2015年8月8日 11:12:37
        public ActionResult CheckCode()
        {
            bool result = false;
            //用户输入的验证码
            string checkCode = Request["CheckCode"].Trim();
            //取出存在session中的验证码
            string code = Session["code"].ToString();
            try
            {
                //验证是否一致
                if (checkCode != code)
                {
                    result = false;
                }
                else
                {
                    result = true;
                }

                return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception e)
            {
                throw new Exception("短信验证失败", e);
            }
        }
        #endregion
    }


显示效果:



发送短信:



接收短信:



验证短信:



很简单的短信验证功能就实现了,现在网上有很多提供短信验证码服务的公司,而且也都会提供一定的免费发送次数。大家可以做个Demo尝试一下。

点击下载博客Demo源代码

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-25 20:39:22

ASP.NET MVC+Bootstrap 实现短信验证的相关文章

在ASP.NET MVC下通过短信验证码注册

以前发短信使用过短信猫,现在,更多地是使用第三方API.大致过程是: → 用户在页面输入手机号码→ 用户点击"获取验证码"按钮,把手机号码发送给服务端,服务端产生几位数的随机码,并保存在某个地方(Session, Applicaiton, 数据库, 等等),调用第三方的API→ 第三方发送几位数的随机码至用户手机→ 用户在页面输入接收到的随机码→ 把随机码等发送给服务端,与服务端保存的随机码比较,如果一致,就通过,让注册 就按如下界面来说吧: 我们需要考虑的方面包括: ● 手机号码:判

【吉光片羽】短信验证

早就听说过阿里大于,短信验证绑定手机的过程我们也经历了很多次.下面简单记录下过程. 1.注册一个应用 得到AppKey 和 App Secret     应用管理-->应用列表 2.设置签名 配置管理-->验证码 签名是出现短信内容最前面的字段,比如[xx科技]xxxx, 这个需要审核.显示是2小时内. 3.设置模板 模板就是用来组织短信内容的部分 4. 应用测试 完成上面3步之后,我们就可以测试下,在应用管理--应用测试 https://www.alidayu.com/center/appl

如何实现php手机短信验证功能

http://www.qdexun.cn/jsp/news/shownews.do?method=GetqtnewsdetailAction&id=1677 下载php源代码 现在网站在建设网站时为了保证用户信息的真实性,往往会选择发短信给用户手机发验证码信息,只有通过验证的用户才可以注册,这样保证了用户的联系信息资料的100%的准确性 .今天笔者就跟大家分享一下如何实现php手机短信验证功能,希望对大家有所帮助. 第一.实现php手机短信验证功能的基本思路 1.要找到短信服务提供商,接入短信服

ASP.NET MVC下的四种验证编程方式[续篇]

在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注ValidationAttribute特性"."让数据类型实现IValidatableObject或者IDataErrorInfo"),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的故事. 一.ModelValidator与ModelVal

[android]ShareSDK——内容分享和短信验证

前言 新版本号ShareSDK的分享和短信验证,按官网的文档,都须要加入一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样.会冲突. 解决的方法:分享用旧版本号,短信验证用新版本号. 后面会有解决的方法. 分享 导入project见初识ShareSDK--嵌入和登陆 <span style="font-size:24px;">OnekeyShare oks = new OnekeyShare(); //全部SSO

安卓 短信验证MobSMS集成

概念及原理 了解MobSMS 主要API 初始化接口 短信验证接口 短信验证回调 代码部分 MobSMS添加到项目中: S1.下载官方SDK文件link: S2.添加并配置SDK库文件: 添加aar/jar文件到\app\libs项目目录 配置build.gradle repositories{ flatDir{ dirs 'libs' // SMSSDK-2.1.4.aar/SMSSDKGUI-2.1.4.aar文件目录 } } dependencies { compile fileTree(

关于手机短信验证服务

浏览了一下找到三家不错的: 1)云通讯(yuntongxun.com) 感觉比较正规,文档也很全面,功能全,支持语音.短信6分每条套餐可便宜点.不过模板短信验证门槛较高,个人不能用,必须要验证为公司,速度感觉不是很理想但听说用的人多,应该会比较稳定. 2)云片网(yunpian.com) 相对于云通讯感觉略有点底气不足,不过门槛较低,可以个人使用,最低可以55的包(1000条),文档较全不过较云通讯略逊色,速度还可以,可以做条件不足时(无需企业认证)的第一选择. 3)Mob官网(mob.com)

ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers

序言 ASP.NET MVC允许开发者创建自定义的HTML Helpers,不管是使用静态方法还是扩展方法.一个HTML Helper本质上其实是输出一段HTML字符串. HTML Helpers能让我们在多个页面上公用同一段HTML标记,这样不仅提高了稳定性也便于开发者去维护.当然对于这些可重用的代码,开发者也方便对他们进行单元测试.所以,创建ASP.NET MVC Bootstrap Helpers是及其有必要的. 内置的HTML Helpers ASP.NET MVC内置了若干标准HTML

C# 发送短信验证吗

C# 发送短信验证吗,布布扣,bubuko.com