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

第一、实现php手机短信验证功能的基本思路
1、要找到短信服务提供商,接入短信服务
2、在网站信息提交页面请求发送信息
3、服务器向短信服务提供商通信,提交发送请求
4、短信服务提供商通过运营商将信息发送到用户的手机中
二、手机号码短信验证前台页面效果实现

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
3 <html xmlns="http://www.w3.org/1999/xhtml">
4
5 <head>
6
7 <title></title>
8
9 <script src="js/jquery-1.4a2.min.js" type="text/javascript"></script>
10
11 <script type="text/javascript">
12
13 /*-------------------------------------------*/
14
15 var InterValObj; //timer变量,控制时间
16
17 var count = 60; //间隔函数,1秒执行
18
19 var curCount;//当前剩余秒数
20
21 var code = ""; //验证码
22
23 var codeLength = 6;//验证码长度
24
25 function sendMessage() {
26
27 curCount = count;
28
29 var dealType; //验证方式
30
31 tel = $(’#tel’).val();
32
33 if(tel!=’’){
34
35 //验证手机有效性
36
37 var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
38
39 if(!myreg.test($(’#tel’).val()))
40
41 {
42
43 alert(’请输入有效的手机号码!’);
44
45 return false;
46
47 }
48
49 tel = $(’#tel’).val();
50
51 //产生验证码
52
53 for (var i = 0; i < codeLength; i++) {
54
55 code += parseInt(Math.random() * 9).toString();
56
57 }
58
59 //设置button效果,开始计时
60
61 $("#btnSendCode").attr("disabled", "true");
62
63 $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
64
65 InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次
66
67 //向后台发送处理数据
68
69 $.ajax({
70
71 type: "POST", //用POST方式传输
72
73 dataType: "text", //数据格式:JSON
74
75 url: ’yanzhengma.php’, //目标地址(根据实际地址)
76
77 data: "&tel=" + tel + "&code=" + code,
78
79 error: function (XMLHttpRequest, textStatus, errorThrown) { },
80
81 success: function (msg){ }
82
83 });
84
85 }else{
86
87 alert(’请填写手机号码’);
88
89 }
90
91 }
92
93 //timer处理函数
94
95 function SetRemainTime() {
96
97 if (curCount == 0) {
98
99 window.clearInterval(InterValObj);//停止计时器
100
101 $("#btnSendCode").removeAttr("disabled");//启用按钮
102
103 $("#btnSendCode").val("重新发送验证码");
104
105 code = ""; //清除验证码。如果不清除,过时间后,输入收到的验证码依然有效
106
107 }
108
109 else {
110
111 curCount--;
112
113 $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
114
115 }
116
117 }
118
119 </script>
120
121 </head>
122
123 <body>
124
125 <input name="tel" id=tel type="text" />
126
127 <input id="btnSendCode" type="button" value="发送验证码" onclick="sendMessage()" /></p>
128
129 </body>
130
131 </html>
132
133 第三、调用短信服务器短信接口
134
135 笔者整理的页面是yanzhengma.php(具体根据服务商提供信息)
136
137 <?php //提交短信
138
139 $post_data = array();
140
141 $post_data[’userid’] = 短信服务商提供ID;
142
143 $post_data[’account’] = ’短信服务商提供用户名’;
144
145 $post_data[’password’] = ’短信服务商提供密码’;
146
147 // Session保存路径
148
149 $sessSavePath = dirname(__FILE__)."/../data/sessions/";
150
151 if(is_writeable($sessSavePath) && is_readable($sessSavePath)){
152
153 session_save_path($sessSavePath);
154
155 }
156
157 session_register(’mobliecode’);
158
159 $_SESSION[’mobilecode’] = $_POST["code"];
160
161 $content=’短信验证码:’.$_POST["code"].’【短信验证】’;
162
163 $post_data[’content’] = mb_convert_encoding($content,’utf-8’, ’gb2312’); //短信内容需要用urlencode编码下
164
165 $post_data[’mobile’] = $_POST["tel"];
166
167 $post_data[’sendtime’] = ’’; //不定时发送,值为0,定时发送,输入格式YYYYMMDDHHmmss的日期值
168
169 $url=’http://IP:8888/sms.aspx?action=send’;
170
171 $o=’’;
172
173 foreach ($post_data as $k=>$v)
174
175 {
176
177 $o.="$k=".$v.’&’;
178
179 }
180
181 $post_data=substr($o,0,-1);
182
183 $ch = curl_init();
184
185 curl_setopt($ch, CURLOPT_POST, 1);
186
187 curl_setopt($ch, CURLOPT_HEADER, 0);
188
189 curl_setopt($ch, CURLOPT_URL,$url);
190
191 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
192
193 //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要将结果直接返回到变量里,那加上这句。
194
195 $result = curl_exec($ch);
196
197 ?>
198
199 第四:提交表单信息时对短信验证码验证
200
201 //手机验证码开始
202
203 session_start();
204
205 $svalitel = $_SESSION[’mobilecode’];
206
207 $vdcodetel = empty($vdcodetel) ? ’’ : strtolower(trim($vdcodetel));
208
209
210
211 if(strtolower($vdcodetel)!=$svalitel || $svalitel==’’)
212
213 {
214
215 ResetVdValue();
216
217 //echo "Pageviews=".$vdcodetel;
218
219 ShowMsg("手机验证码错误!", ’-1’);
220
221 exit();
222
223 }
来源:https://www.cnblogs.com/westsoft/p/5924908.html