关于手机短信接收验证码的实现原理:
思路:
A:获得验证码:
1.找到相关的表。
2.用什么发送,post,get ,ajax,当然ajax首选
3.post之前要js先判断是手机号码11位,并且全部都是数字,或者用正则也行。
4.用ajax发送数据data,要对数据进行检验,过滤有效数据valid
5.insert前要先判断这手机是否验证过了,已经验证过就return false;没验证过则把随机生成的6位验证码insert 数据库表中。
6.通过提供给你api写好调用,把验证码跟msg通过ajax返回值发送给向客户,并用js做一个倒计时计数器.

B:接收验证码,提交表单:
1.接收post过来数据,把验证码跟跟刚才插入数据库中的6位key进行比较。如果相等,则说明是最后一次发送的验证码才有效。
2.对数据库insert 操作.最少要做个认证tag标志.

先贴出html部分:

 <!--手机认证 Begin--><div style="display: block;" class="auth_ck_detail" id="auth_ck_phone"><div class="item_title item_margin"><p>手机认证</p><span class="shadow"></span></div><form name="myform" id="myform" action="http://www.hnb.cc/jiaoyou/usercp.php?c=certify&amp;a=rzmobile" method="post"><table class="user-table table-margin lh35" border="0" cellpadding="0" cellspacing="0" width="98%"><tbody><tr><td class="lblock" width="15%">您的手机号码:</td><td class="rblock" width="85%"><input name="mobile" id="mobile" value="" class="input-150" type="text" style="width:130px;"> &nbsp;&nbsp;<input name="btn_downtime" id="btn_downtime" value="免费获取验证码" style="height: 25px; background:#F5487A; color:#fff; padding-left: 2px; padding-right: 5px; width:175px;" class="button-green-b" type="button"> <span id="tips_mobile"></span><br><div class="mb-verifycode" style=" width:320px; background:#FFDD55;margin-top:10px; color:#666666; padding-left:10px; padding-bottom:5px;" ><p style="font-size:13px;">输入以下图片校验码才可以获取手机验证码</p><dl style=" float:left;"><dt style=" float:left;">校验码:</dt><dd style=" float:left;   "><input  style="width:100px; " value="" name="mbverifycode" id="mbverifycode" maxlength="6" type="text"> <img id="verifycode-img" src="#" style="vertical-align: middle;"> <span id="btn_mbverifycode" >换一个</span></dd><div style="clear: both;"></div></dl><div style="clear: both;"></div></div></td></tr><tr><td class="lblock">收到的验证码:</td><td class="rblock"><input value="" name="checkcode" id="checkcode" class="input-s" type="text"> <font color="#df4070">(输入您手机收到的验证码)</font></td></tr><tr><td class="lblock" height="40"></td><td class="rblock"><input value="提交验证" οnclick="return checkrzmobile();" class="button-gray" type="button"></td></tr></tbody></table></form><table class="user-table table-margin lh25" border="0" cellpadding="0" cellspacing="0" width="98%"><tbody><tr><td>为什么要进行手机认证?<br>1、认证通过后可在您的资料页点亮手机认证图标,提高你的诚信等级;<br>2、接收来自网站和会员发送的手机短信。<br></td></tr></tbody></table><script type="text/javascript">//处理手机验证码$("#verifycode-img").attr("src", "/jiaoyou/source/include/imagecode.php?act=verifycode&t_code="+(new Date()).getTime());$(function(){$("#btn_mbverifycode").click(function(){$("#verifycode-img").attr("src", "/jiaoyou/source/include/imagecode.php?act=verifycode&t_code="+(new Date()).getTime());return false;});$("#btn_downtime").click(function(){ //获取手机验证码var tips = $("#tips_mobile");var args_mobile = $("#mobile").val();var args_mbverifycode = $("#mbverifycode").val();if (!isMobile(args_mobile)) {tips.html('请填写正确的手机号码');return false;}$.ajax({type: 'POST',//jiaoyou/index.php?c=ajax&a=checkregmobile// url:"/jiaoyou/index.php?c=ajax",url:"/jiaoyou/usercp.php?c=certify",cache: false,data: {a:"checkregmobile", mobile: args_mobile, verifycode:args_mbverifycode, r: get_rndnum(8)},dataType: 'json',success: function(data) {var json = eval(data);var response = json.response;var result = json.msg;// alert(json.response);if (response == "1") {initGetDownTime('mobile', 'btn_downtime');/*时间倒计时*/tips.html("<font color='green'>验证码发送成功,请注意查收。</font>");}else {if (result.length > 0) {tips.html("<font color='red'>"+result+"</font>");}else {tips.html("<font color='red'>发送失败,请检查手机号。</font>");}}},error: function() {tips.html("<font color='red'>请求错误</font>");}});});});/*----------------- 倒计时 start ----------------*/var init_down_time = 60;var init_intervalDownTimeObj;/*** 倒计时* @param:: string mbinput */function initGetDownTime(mbinput, btnobj) {var mb = $("#"+mbinput).val();if (isMobile(mb)) {init_intervalDownTimeObj = setInterval("countDownTime('"+btnobj+"')", 1000);}}function countDownTime(btn) {$('#'+btn).attr("disabled", "true");$('#'+btn).val(""+init_down_time+"秒后没收到短信重新发送");init_down_time--;if (init_down_time == 0){clearInterval(init_intervalDownTimeObj); //停止时间$('#'+btn).removeAttr("disabled");$('#'+btn).val("重新发送");init_down_time = 60;}}/*----------------- 倒计时 end ----------------*/</script></div><!--//手机认证 End-->

A:

下面php接收ajax接收方法:

/*hnb新增加的手机接收验证方法*/public function control_checkregmobile( ){$response = 0;$mobile = XRequest::getArgs('mobile');/*得到手机号  这个跟$_post接收数据是一样的*/$checkcode = XRequest::getArgs('verifycode');/*得到验证码这个跟$_post接收数据是一样的*/if (!empty($checkcode)) {parent::loadUtil('session');$nowcode = XSession::get('verifycode');if ($checkcode!== $nowcode) {echo json_encode(array('response' => $response,'msg'=>'您的校验码有误!'));exit;}}else{echo json_encode(array('response' => $response,'msg'=>'您的校验码有误!'));exit;}$model = parent::model('user','am');$target = "http://api.bjszrk.com/sdk/BatchSend.aspx"; /*接口url*/if (true === $model->doExistsMobile($mobile)) /*检测手机是否已经验证*/{$response = 2;$msg='对不起,您的手机号码已经通过验证,请不要重复操作!';}else {$model_certify = parent::model('certify', 'um');list($mbcode, $error) = $model_certify->GetMobileCode($mobile); /*生成一个随机数及插入数据*/$content="您的验证码是:".$mbcode."。欢迎注册我主良缘交友网,请勿将验证码告知他人!";$msg=$model->postMbCode($mobile, $content);   /*调用post给api接口方法*/ $response = 1;$msg='验证码已发送成功,请注意查收!';}echo json_encode(array('response'=>$response,'msg'=>$msg));}

检测手机是否已经验证过的doExistsMobile方法如下:

    public function doExistsMobile($mobile){$res = false;$sql = 'SELECT `userid` FROM ' . DB_PREFIX . 'user_attr' . " WHERE `mobile`='{$mobile}'";$rows = parent::$obj->fetch_first($sql);if (!empty($rows)) {$res = true;} unset($sql, $rows);return $res;}
/*GetMobileCode方法具体实现如下:*//*r把随机得到的6位验证码insert到数据库表中*/public function GetMobileCode($mobile){$result = 0;$message = null;$checkcode = XHandle::getRndChar(6, 1);$userid=parent::$wrap_user['userid'];$sql="update user_status set mobilesalt='$checkcode' where userid='$userid'";parent::$obj->query($sql);$result = 1;$sql = (('SELECT * FROM ' . DB_PREFIX) . 'mobile_checkcode') . " WHERE `mobile`='{$mobile}'";$rows = parent::$obj->fetch_first($sql);if (!empty($rows)) {$array = array('checkcode' => $checkcode, 'updatetime' => time());parent::$obj->update(DB_PREFIX . 'mobile_checkcode', $array, ('`id`=\'' . $rows['id']) . '\'');} else {$id = parent::$obj->fetch_newid(('SELECT MAX(id) FROM ' . DB_PREFIX) . 'mobile_checkcode', 1);$array = array('id' => $id, 'mobile' => $mobile, 'checkcode' => $checkcode, 'createtime' => time());parent::$obj->insert(DB_PREFIX . 'mobile_checkcode', $array);}unset($sql);unset($rows);return array($checkcode, $message);}

B:

下面是得到了验证码Form表单点提交php的方法.

        submit提交*/public function control_rzmobile( ){$service = parent::service( "certify", "us" );/*接收数据,验证手机格式及号码*/list( $mobile, $salt ) = $service->validRzMobile( );/*salt 为手机验证码*/unset( $service );$model = parent::model( "certify", "um" );$result = $model->doValidMobile( $mobile, $salt );  /*调用model三张表进行数据操作*/unset( $model );if ( TRUE === $result ){if ( $this->halttype == "jdbox" ){XHandle::jqdialog( "手机号码验证成功", 1 );}else{XHandle::halt( "手机号码验证成功", $this->ucfile."?c=certify", 0 );}}else{XHandle::halt( "手机号码验证失败", "", 1 );}}

上面dovalidmobile函数方法具体实现:

/*手机认证提交 分别在三个表里操作对象*/public function doValidMobile( $mobile, $validkey ){$result = FALSE;$sql = "SELECT userid FROM ".DB_PREFIX.( "user_status WHERE mobilesalt='".$validkey."' AND userid='" ).parent::$wrap_user['userid']."'";//SELECT userid FROM user_status WHERE mobilesalt='5522' AND userid='209367'$rows = parent::$obj->fetch_first( $sql );if ( !empty( $rows ) ){$status_array = array("mobilerz" => 1,"mobilesalt" => XHandle::getrndchar( 6, 1 ));// print_r($status_array);exit;parent::$obj->update( DB_PREFIX."user_status", $status_array, "userid='".parent::$wrap_user['userid']."'" );$attr_array = array("mobile" => $mobile);parent::$obj->update( DB_PREFIX."user_attr", $attr_array, "userid='".parent::$wrap_user['userid']."'" );parent::loadlib( "user" );$star = XUser::updatestar( parent::$wrap_user['userid'] );  /*加星为user_status表里设置star星级*/$result = TRUE;if ( TRUE === $result ){$m_indexs = parent::model( "indexs", "am" );  /*作用在user_params表里加上论证标志,可能是用户左边栏加上星标志*/$m_indexs->updateIndexs( parent::$wrap_user['userid'], array("rzmobile" => 1,"star" => $star) );unset( $m_indexs );}}return $result;}

手机短信接收验证码的实现原理相关推荐

  1. 手机短信接收验证码的实现原理:

    关于手机短信接收验证码的实现原理: 思路: A:获得验证码: 1.找到相关的表. 2.用什么发送,post,get ,ajax,当然ajax首选 3.post之前要js先判断是手机号码11位,并且全部 ...

  2. PHP做手机短信注册验证码

    PHP做手机短信注册验证码 1.进入云之讯平台 云之讯官方网站: 2.注册并登陆.下载SDK及阅读开发文档 (这是我先注册好的,新用户可以免费体验) 解压后 其中lib文件夹是主要请求api的PHP源 ...

  3. 发送手机短信获取验证码功能

    因为移动端的方便,现在网络上很多的网站与应用都有与实现用户手机绑定的功能.这样做的好处很多,例如账号登陆.修改密码.在线支付--等功能模块都可以与手机实时获取验证码短信结合,来确保用户的安全性操作. ...

  4. 短信接口调用-手机短信,验证码

    本文章短信平台接口基于中国网建SMS短信平台API,相关网址为点我打开--->中国网建SMS短信平台.注册后即可立即使用,无信息审核验证延迟. 通过中国网建第三方API发送一条短信,需要知道以下 ...

  5. 云之讯---短信接收验证码

    1.首先,先去注册,登陆后下载自己的SDK  文件内容如下 有三个php一个html 2.下载了SDK先去读取文档内容  进行查找自己的 accountsid(开发者控制台首页上的Account Si ...

  6. PHP 手机短信发送验证码

    点击链接加入群[php/web 学习课堂]:https://jq.qq.com/?_wv=1027&k=5645xiw 欢迎大家加入,一起讨论学习 本篇设计的知识点有点多,我会分类将,同学们可 ...

  7. 安卓开发之使用Mob的短信接收验证码达到忘记密码找回密码功能*(自绘界面)

    /** * Created by 岗哥 on 2016/12/17. *下面使用的ShowToast是自己写的一个类,当然你们改成Toast就行了 *还有就是如果需要使用Mob发送验证码找回密码的话, ...

  8. 阿里云——Java实现手机短信验证码功能

    目录 如何实现短信验证码功能 1.准备工作 1.1 注册 阿里云 账号,并完成实名认证.找到短信服务功能. 1.2 开通短信服务 1.3 签名与模板 1.4 获取AccessKey 1.5 打开短信控 ...

  9. 短信语音验证码发展的必然趋势

    在互联网的大潮中,很多移动即时通讯软件也随之崛起,在这期间短信在互联网的发展中一直占据了不可取代的位置. 在之前,短信是用来联系对方的,然后随着一些手机软件的不断更新换代中,现在大部分的人都用微信或者 ...

最新文章

  1. js获取Html元素的实际宽度高度
  2. Linux之 proc文件系统
  3. HTML5 input 类型
  4. 程序员要掌握的20个实用技巧
  5. window.btoa()方法;使字符编码成base64的形式
  6. JavaScript和C#通用gb2312和utf8编码解码函数简单实现
  7. 【华为云技术分享】【Python算法】分类与预测——Python随机森林
  8. Linux学习课程笔记(1)
  9. L2-016. 愿天下有情人都是失散多年的兄妹-PAT团体程序设计天梯赛GPLT(广度优先bfs)
  10. OpenCV精进之路(十一):感兴趣区域ROI和logo添加技术
  11. 【面向工业界】京东NLP算法工程师培养计划
  12. 生活随记 - 2020国庆第一天
  13. fat,uat,pre等环境含义
  14. YOLOv5数据集标注工具
  15. netware php_服务器_如何在 Netware 服务器中安装多块网卡,如果网络在扩大时服务器只装 - phpStudy...
  16. 实战篇---Nios ii 基本操作
  17. ios网易大白Crash自动防护
  18. [87] 傻B、牛B、装B的英文用法详解
  19. FCPX插件-20种手绘涂鸦潦草文字标题动画 Sketch Scribble Titles
  20. 电池充放电1c指的是什么

热门文章

  1. 喜讯:盘古开源荣获多项数据存储行业荣誉奖项
  2. 电子科技大学格拉斯哥学院基础实践————寝室情况及存在问题
  3. bootstrap3 snippets使用方法
  4. 微信获取openId
  5. Verisiondog自动化系统备份
  6. 如何成为一名项目经理
  7. 网易云亮相GITC,聚合多样化通信与视频云平台
  8. B站这个视频我是跪着看完的
  9. IDEA 打包没有main class (非maven)
  10. Xshell光标消失