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
}
显示效果:
发送短信:
接收短信:
验证短信:
非常easy的短信验证功能就实现了。如今网上有非常多提供短信验证码服务的公司,并且也都会提供一定的免费发送次数。大家能够做个Demo尝试一下。
ASP.NET MVC+Bootstrap 实现短信验证的更多相关文章
- 在ASP.NET MVC下通过短信验证码注册
以前发短信使用过短信猫,现在,更多地是使用第三方API.大致过程是: → 用户在页面输入手机号码→ 用户点击"获取验证码"按钮,把手机号码发送给服务端,服务端产生几位数的随机码,并 ...
- ASP.NET MVC 手机短信验证
本文来自于stoneniqiu的文章,原文地址 http://www.cnblogs.com/stoneniqiu/p/6234002.html 1.注册一个应用 得到AppKey 和 App Sec ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理
这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- Mob.com 短信验证的简单使用
1.环境配置 http://wiki.sharesdk.cn/android-短信sdk集成文档/ a.sdk下载 http://www.mob.com/#/downloadDetail/SMS/an ...
- ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers
阅读目录 序言 内置的HTML Helpers 创建自定义的Helpers 使用静态方法创建Helpers 使用扩展方法创建Helpers 创建Fluent Helpers 创建自动闭合的Helper ...
- python基于LeanCloud的短信验证
python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
随机推荐
- C#高级编程9 第14章 内存管理和指针
C#高级编程9 内存管理和指针 后台内存管理 1) 值数据类型 在处理器的虚拟内存中有一个区域,称为栈,栈存储变量的浅副本数据,通过进入变量的作用域划分区域,通过离开变量的作用域释放. 栈的指针指向栈 ...
- C#中常见的系统内置委托用法详解(抄录)
C#中常见的系统内置委托 Action类.Func类.Predicate<T>.Comparison<T>委托 Action类的委托 Action委托 封装一个方法,该方法不具 ...
- 【scrapy】使用方法概要(三)(转)
请初学者作为参考,不建议高手看这个浪费时间] 前两篇大概讲述了scrapy的安装及工作流程.这篇文章主要以一个实例来介绍scrapy的开发流程,本想以教程自带的dirbot作为例子,但感觉大家应该最先 ...
- HDU 4708 Rotation Lock Puzzle (简单题)
Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- DeJaVu update history
17.05.08 <-> Added Audi RB8 random code direct change -> Now can adapt VIN based keys or ke ...
- datagrid在MVC中的运用02-结合搜索
本文接着上一篇,来体验给datagrid加上搜索功能.主要涉及到: ※ 把一个div与datagrid相关起来 ※ datagrid接收查询参数 ※ 查询参数的封装 效果图: 查询参数封装 分页相关的 ...
- MVC单元测试,使用Repository模式、Ninject、Moq
本篇使用Repository设计MVC项目,使用Ninject作为DI容器,借助Moq进行单元测试. 模型和EF上下文 模型很简单: public class Foo { public int Id ...
- 报错:无法将类型"System.Data.EntityState"隐式转换为"System.Data.Entity.EntityState"
报错:无法将类型"System.Data.EntityState"隐式转换为"System.Data.Entity.EntityState". 出错语句停留 ...
- MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 ...
- C#编程(六)------------枚举
原文链接:http://blog.csdn.net/shanyongxu/article/details/46423255 枚举 定义枚举用到的关键字:enum public enum TimeOfD ...