java开发需要文本框输入手机号点击获取爱码 验证码 对接实现和移动接口对接从而实现发送短信获取爱码 验证码 对接求解

56327人阅读
网络编程技术(1)
Java后端技术(76)
近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限,还请大家见谅!
一:首先上几张案例截图,以便大家可以了解一下短信验证码的流程,这里我在做的过程中也参考了很多网站的短信验证码,比如:58同城,汽车之家等。
1.点击获取验证码之前的样式:
2.输入正确的手机号后点击获取验证码之后的样式:
3.如果手机号已经被注册的样式:
4.如果一个手机号一天发送超过3次就提示不能发送:
二:前台的注册页面的代码:reg.jsp
&%@ page language=&java& import=&java.util.*& pageEncoding=&UTF-8&%&
&%@taglib prefix=&s& uri=&/struts-tags&%&
&%@page import=&cn.gov.csrc.base.action.FindAllData&%&
String path = request.getContextPath();
String basePath = request.getScheme() + &://&
+ request.getServerName() + &:& + request.getServerPort()
+ path + &/&;
&!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN&&
&base href=&&%=basePath%&&&
&title&中国证券会证券期货违法违规举报中心-注册&/title&
&meta http-equiv=&pragma& content=&no-cache&&
&meta http-equiv=&cache-control& content=&no-cache&&
&meta http-equiv=&expires& content=&0&&
&meta http-equiv=&keywords& content=&keyword1,keyword2,keyword3&&
&meta http-equiv=&description& content=&This is my page&&
&link rel=&shortcut icon& type=&image/x-icon& href=&&%=request.getContextPath()%&/images/favicon.ico& /&
&link rel=&stylesheet& type=&text/css&
href=&&%=request.getContextPath()%&/css/main.css&&
href=&&%=request.getContextPath()%&/formValidator1/style/validator.css&
rel=&stylesheet& type=&text/css& /&
&style type=&text/css&&
background: #F0F0F0 repeat-x;
padding-top: 3
border-top : 1px solid #708090;
border-right: 1px solid #708090;
border-bottom: 1px solid #708090;
border-left: 1px solid #708090;
line-height: 12
font-size : 10
font-size: 10
border-top: 1px solid #708090;
&script src=&&%=request.getContextPath()%&/js/jquery-1.7.2.min.js&
type=&text/javascript&&&/script&
&script src=&&%=request.getContextPath()%&/formValidator1/formValidator-4.0.1.js&
type=&text/javascript&&&/script&
&script src=&&%=request.getContextPath()%&/formValidator1/formValidatorRegex.js&
type=&text/javascript&&&/script&
&script src=&&%=request.getContextPath()%&/js/register.js&
type=&text/javascript&&&/script&
&script src=&&%=request.getContextPath()%&/js/sms.js&
type=&text/javascript&&&/script&
&script type=&text/javascript&&
function changeCheckNum() {
var checkNumImage_ = document.getElementById(&checkNumImage&);
checkNumImage_.src = &${pageContext.request.contextPath}/image.jsp?timeStamp=&+ new Date().getTime();
&script type=&text/javascript&&
var msg = &${message}&;
if (msg != &&) {
alert(msg);
&%@include file=&/statics/top.jspf&%&
&div class=&center_division&&
&div class=&center_body&&
&div class=&center_menu&&
&font color=&#000000&&当前位置:&/font&
&a href=&&%=request.getContextPath()%&/statics/reg.jsp&&&font color=&#000000&&用户注册&/font&&/a&
&div class=&center_body_menu&&
&s:form action=&RegisterAction_register& id=&form1& name=&form1& method=&post& namespace=&/&&
&table id=&tb&&
&td colspan=&3& align=&center& bgcolor=&#DDDFE1&&举报人基本信息&/td&
&td align=&center& width=&30%&&    &img src=&images/new_reg_xing.gif&/&用户名:&/td&
&td align=&center& width=&40%&&
&s:textfield name=&username& id=&username& cssStyle=&width:160height:24& onblur=&checkusername()&/&
&td align=&left& width=&30%&&
&span id=&usernameTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&username&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&登录密码:&/td&
&td align=&center& width=&40%&&
&s:password name=&password& id=&password& cssStyle=&width:160height:24& onblur=&checkpassword()&/&
&td align=&left& width=&30%&&
&span id=&passwordTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&password&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&确认密码:&/td&
&td align=&center& width=&40%&&
&s:password name=&passwordRepeat& id=&passwordRepeat& cssStyle=&width:160height:24& onblur=&checkpasswrodb()&/&
&td align=&left& width=&30%&&
&span id=&passwordRepeatTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&passwordRepeat&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&姓        名:&/td&
&td align=&center& width=&40%&&
&s:textfield name=&nickname& id=&nickname& cssStyle=&width:160height:24& onblur=&checknickname()&/&
&td align=&left& width=&30%&&
&span id=&nicknameTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&nickname&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&性        别:&/td&
&td align=&center& width=&40%&&
&s:radio list=&#application.dataMap.get('10001')& name=&jbSex& cssStyle=&height:24&/&
&td align=&left& width=&30%&&&/td&
&td align=&center& width=&30%&&联系地址:&/td&
&td align=&center& width=&40%&&
&s:textfield name=&jbAddress& id=&jbAddress& cssStyle=&width:160height:24& /&
&td align=&left& width=&30%&&
&span id=&jbAddressTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&jbAddress&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&联系手机:&/td&
&td align=&center& width=&40%&&
&s:textfield id=&jbPhone& name=&jbPhone& cssStyle=&width:160height:24& onblur=&checkjbPhone()&/&
&td align=&left& width=&30%&&
&span id=&jbPhoneTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&jbPhone&/s:param&
&/s:fielderror&
&td align=&center&&&img src=&images/new_reg_xing.gif&/&短信验证码:&/td&
&td align=&left& colspan=&2& style=&padding-left: 112&&
&s:textfield id=&SmsCheckCode& name=&SmsCheckCode& cssStyle=&width:80height:24& maxLength=&6& /&
&span&&input type=&button& id=&btnSendCode& name=&btnSendCode& value=&免费获取验证码& onclick=&sendMessage()& /&&/span&
&span id=&SmsCheckCodeTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&SmsCheckCodeTip&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&证件类型:&/td&
&td align=&center& width=&40%&&
&s:select list=&#application.dataMap.get('10002')& label=&&
headerKey=&& headerValue=&--请选择--& value=&1& listValue=&value& onchange=&enableCredentialsCode(this)&
name=&jbCredentialsName& id=&jbCredentialsName& cssStyle=&width:160height:24&/&
&td align=&left& width=&30%&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&jbCredentialsName&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&证件号码:&/td&
&td align=&center& width=&40%&&
&s:textfield name=&jbCredentialsCode& id=&jbCredentialsCode& cssStyle=&width:160height:24& onblur=&checkjbCredentialsCode()&/&
&td align=&left& width=&30%&&
&span id=&jbCredentialsCodeTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&jbCredentialsCode&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&单位名称:&/td&
&td align=&center& width=&40%&&
&s:textfield name=&jbCompanyName& id=&jbCompanyName& cssStyle=&width:160height:24& /&
&td align=&left& width=&30%&&
&span id=&jbCompanyNameTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&jbCompanyName&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&&img src=&images/new_reg_xing.gif&/&所在地区:&/td&
&td align=&center& width=&40%&&
&s:select list=&#application.dataMap.get('10003')& label=&&
headerKey=&& headerValue=&--请选择--& listKey=&key&
cssStyle=&width:160height:24& listValue=&value& id=&jbSourceArea&
name=&jbSourceArea& onblur=&checkjbSourceArea()&/&
&td align=&left& width=&30%&&
&span id=&jbSourceAreaTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&jbSourceArea&/s:param&
&/s:fielderror&
&td align=&center& width=&30%&&    &img src=&images/new_reg_xing.gif&/&验证码:&/td&
&td align=&center& width=&40%&&
&s:textfield id=&checkNum& name=&checkNum& cssStyle=&width:60height:24& onblur=&checkNumber()& maxLength=&4&/&
&img id=&checkNumImage& src=&${pageContext.request.contextPath}/image.jsp&&
&a onClick=&changeCheckNum()& title=&点击换一张& style=&cursor:&& 换一张&/a&
&td align=&left& width=&30%&&
&span id=&checkNumTip&&
&s:fielderror cssStyle=&color:padding-left:10&&
&s:param&checkNumTip&/s:param&
&/s:fielderror&
&td colspan=&3& style=&vertical-align: padding-top: 5padding-bottom: 5&&
&input type=&submit& value=&注册& style=&width:50 height:24&/&
  
&input type=&reset& value=&重置& style=&width:50 height:24&/&
&%@include file=&/common/buttom.jspf&%&
三:前台获取短信验证码的js:sms.js
var InterValO //timer变量,控制时间
var count = 120; //间隔函数,1秒执行
var curC//当前剩余秒数
var code = &&; //验证码
var codeLength = 6;//验证码长度
function sendMessage() {
curCount =
var jbPhone = $(&#jbPhone&).val();
var jbPhoneTip = $(&#jbPhoneTip&).text();
if (jbPhone != &&) {
if(jbPhoneTip == &√ 该手机号码可以注册,输入正确& || jbPhoneTip == &√ 短信验证码已发到您的手机,请查收&){
// 产生验证码
for ( var i = 0; i & codeL i++) {
code += parseInt(Math.random() * 9).toString();
// 设置button效果,开始计时
$(&#btnSendCode&).attr(&disabled&, &true&);
$(&#btnSendCode&).val(&请在& + curCount + &秒内输入验证码&);
InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次
// 向后台发送处理数据
type: &POST&, // 用POST方式传输
dataType: &text&, // 数据格式:JSON
url: &UserAction_sms.action&, // 目标地址
data: &jbPhone=& + jbPhone +&&code=& + code,
error: function (XMLHttpRequest, textStatus, errorThrown) {
success: function (data){
data = parseInt(data, 10);
if(data == 1){
$(&#jbPhoneTip&).html(&&font color='#;&√ 短信验证码已发到您的手机,请查收&/font&&);
}else if(data == 0){
$(&#jbPhoneTip&).html(&&font color='red'&× 短信验证码发送失败,请重新发送&/font&&);
}else if(data == 2){
$(&#jbPhoneTip&).html(&&font color='red'&× 该手机号码今天发送验证码过多&/font&&);
$(&#jbPhoneTip&).html(&&font color='red'&× 手机号码不能为空&/font&&);
//timer处理函数
function SetRemainTime() {
if (curCount == 0) {
window.clearInterval(InterValObj);// 停止计时器
$(&#btnSendCode&).removeAttr(&disabled&);// 启用按钮
$(&#btnSendCode&).val(&重新发送验证码&);
code = &&; // 清除验证码。如果不清除,过时间后,输入收到的验证码依然有效
curCount--;
$(&#btnSendCode&).val(&请在& + curCount + &秒内输入验证码&);
$(document).ready(function() {
$(&#SmsCheckCode&).blur(function() {
var SmsCheckCodeVal = $(&#SmsCheckCode&).val();
// 向后台发送处理数据
url : &UserAction_checkCode.action&,
data : {SmsCheckCode : SmsCheckCodeVal},
type : &POST&,
dataType : &text&,
success : function(data) {
data = parseInt(data, 10);
if (data == 1) {
$(&#SmsCheckCodeTip&).html(&&font color='#;&√ 短信验证码正确,请继续&/font&&);
$(&#SmsCheckCodeTip&).html(&&font color='red'&× 短信验证码有误,请核实后重新填写&/font&&);
四:验证码用户名和手机号码的js:register.js
//去掉前后空格
function trim(str) {
var strnew = str.replace(/^\s*|\s*$/g, &&);
function checkusername() {
var username = document.form1.username.
if (username == && || !isNaN(username.charAt(0))) {
document.getElementById(&usernameTip&).innerHTML = &&font color='red'&× 首字母不能为数字或者用户名不能为空&/font&&;
} else if (username.length & 6 || username.length & 30) {
document.getElementById(&usernameTip&).innerHTML = &&font color='red'&× 用户名长度为6-30位字符&/font&&;
document.getElementById(&usernameTip&).innerHTML = &&font color='#;&√ 用户名合格&/font&&;
// 向后台发送处理数据
url : &UserAction_checkUserName.action&,// 目标地址
data : {username : username}, // 目标参数
type : &POST&, // 用POST方式传输
dataType : &text&, // 数据格式:text
success : function(data) {
data = parseInt(data, 10);
if (data != 0) {
$(&#usernameTip&).html(&&font color='red'&× 该用户名已经被注册,请重新输入&/font&&);
$(&#usernameTip&).html(&&font color='#;&√ 该用户名可以注册,输入正确&/font&&);
// 登录密码
function checkpassword() {
var password = document.form1.password.
if (password.length & 6 || password.length & 30) {
document.getElementById(&passwordTip&).innerHTML = &&font color='red'&× 密码长度不能小于6位,大于30位&/font&&;
} else if (!isNaN(password)) {
document.getElementById(&passwordTip&).innerHTML = &&font color='red'&× 密码不能全是数字&/font&&;
document.getElementById(&passwordTip&).innerHTML = &&font color='#;&√ 密码合格&/font&&;
// 确认密码
function checkpasswrodb() {
var password = document.form1.password.
var passwordRepeat = document.form1.passwordRepeat.
if (trim(password) != trim(passwordRepeat)) {
document.getElementById(&passwordRepeatTip&).innerHTML = &&font color='red'&× 两次密码输入必须一致&/font&&;
document.getElementById(&passwordRepeatTip&).innerHTML = &&font color='#;&√ 密码输入一致&/font&&;
function checknickname() {
var nickname = document.form1.nickname.
if (trim(nickname) == &&) {
document.getElementById(&nicknameTip&).innerHTML = &&font color='red'&× 姓名不能为空&/font&&;
document.getElementById(&nicknameTip&).innerHTML = &&font color='#;&√ 姓名输入正确&/font&&;
// 联系手机(ajax验证手机号码是否已经存在)
function checkjbPhone() {
var jbPhone = document.form1.jbPhone.
var re= /(^1[3|5|8][0-9]{9}$)/;
if (trim(jbPhone) == &&) {
document.getElementById(&jbPhoneTip&).innerHTML = &&font color='red'&× 手机号码不能为空&/font&&;
} else if(trim(jbPhone) != &&){
if(!re.test(jbPhone)){
document.getElementById(&jbPhoneTip&).innerHTML = &&font color='red'&× 请输入有效的手机号码&/font&&;
document.getElementById(&jbPhoneTip&).innerHTML = &&font color='#;&√ 手机号码输入正确&/font&&;
// 向后台发送处理数据
url : &UserAction_checkPhone.action&,// 目标地址
data : {jbPhone : jbPhone}, // 目标参数
type : &POST&, // 用POST方式传输
dataType : &text&, // 数据格式:text
success : function(data) {
data = parseInt(data, 10);
if (data != 0) {
$(&#jbPhoneTip&).html(&&font color='red'&× 该手机号码已经被注册,请重新输入&/font&&);
$(&#jbPhoneTip&).html(&&font color='#;&√ 该手机号码可以注册,输入正确&/font&&);
// 证件号码
function checkjbCredentialsCode() {
var jbCredentialsCode = document.form1.jbCredentialsCode.
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (trim(jbCredentialsCode) == &&) {
document.getElementById(&jbCredentialsCodeTip&).innerHTML = &&font color='red'&× 证件号码不能为空&/font&&;
} else if(trim(jbCredentialsCode) != &&){
if(!reg.test(jbCredentialsCode)){
document.getElementById(&jbCredentialsCodeTip&).innerHTML = &&font color='red'&× 请输入合法的证件号码&/font&&;
document.getElementById(&jbCredentialsCodeTip&).innerHTML = &&font color='#;&√ 证件号码输入正确&/font&&;
// 向后台发送处理数据
url : &UserAction_checkCredentialsCode.action&,// 目标地址
data : {jbCredentialsCode : jbCredentialsCode}, // 目标参数
type : &POST&, // 用POST方式传输
dataType : &text&, // 数据格式:text
success : function(data) {
data = parseInt(data, 10);
if (data != 0) {
$(&#jbCredentialsCodeTip&).html(&&font color='red'&× 该证件号码已经被注册,请重新输入&/font&&);
$(&#jbCredentialsCodeTip&).html(&&font color='#;&√ 该证件号码可以注册,输入正确&/font&&);
// 所在地区
function checkjbSourceArea() {
var jbSourceArea = document.form1.jbSourceArea.
if (trim(jbSourceArea) == &&) {
document.getElementById(&jbSourceAreaTip&).innerHTML = &&font color='red'&× 请选择所在地区&/font&&;
document.getElementById(&jbSourceAreaTip&).innerHTML = &&font color='#;&√ 所在地区选择正确&/font&&;
function checkNumber() {
var checkNum = document.form1.checkNum.
if (trim(checkNum) == &&) {
document.getElementById(&checkNumTip&).innerHTML = &&font color='red'&× 验证码不能为空&/font&&;
document.getElementById(&checkNumTip&).innerHTML = &&font color='#;&√ 验证码合格&/font&&;
// 向后台发送处理数据
url : &UserAction_checkNum.action&,// 目标地址
data : {checkNum : checkNum}, // 目标参数
type : &POST&, // 用POST方式传输
dataType : &text&, // 数据格式:text
success : function(data) {
data = parseInt(data, 10);
if (data != 0) {
$(&#checkNumTip&).html(&&font color='red'&× 验证码错误&/font&&);
$(&#checkNumTip&).html(&&font color='#;&√ 验证码正确&/font&&);
五:后台action的代码:UserAction.java(这里只是调用了我们的第三方给提供的客户端代码的发送短信的方法,如果是调用其他的短信平台,可以换成他们的发送短信的方法,这里只是给大家做个参考)
package cn.gov.csrc.base.systemmanager.
import java.io.IOE
import java.io.PrintW
import java.util.L
import javax.annotation.R
import javax.servlet.http.HttpServletR
import org.apache.log4j.L
import org.apache.struts2.convention.annotation.A
import org.apache.struts2.convention.annotation.R
import org.apache.struts2.convention.annotation.R
import org.springframework.context.annotation.S
import org.springframework.security.authentication.encoding.MessageDigestPasswordE
import org.springframework.security.core.context.SecurityContextH
import org.springframework.stereotype.C
import cn.gov.csrc.base.action.BaseA
import cn.gov.csrc.base.log.service.LogS
import cn.gov.csrc.base.monU
import cn.gov.csrc.base.report.util.E
import cn.gov.csrc.base.systemmanager.model.C
import cn.gov.csrc.base.systemmanager.model.U
import cn.gov.csrc.base.systemmanager.service.CountS
import cn.gov.csrc.base.systemmanager.service.UserS
import cn.gov.csrc.base.util.WebContextU
import com.sms.webservice.client.SmsReturnO
import com.sms.webservice.client.SmsWebC
* File: UserAction.java
* Author: jiangsai
* Version: 1.1
* Date: 04/17/2013
* Description:用户
* Copyright csrc
@Controller()
@Scope(&prototype&)
@Results({
@Result(name = &success&, location = &/statics/report.jsp&),
@Result(name = &modifyPassword&, location = &/statics/modifyPassword.jsp&)
public class UserAction extends BaseAction&User& {
private static final long serialVersionUID = 7691191L;
private static Logger log = Logger.getLogger(UserAction.class);
private static final String url = Env.getInstance().getProperty(&url&);
private static final String userName = Env.getInstance().getProperty(
&username&);
private static final String passWord = Env.getInstance().getProperty(
&password&);
private S// 用户名
private S// 密码
private String passwordR// 确认密码
private String jbP//手机号码
private String jbCredentialsC//身份证号码
private String checkN//图片验证码
private String newP
private String confirmP
private Integer[] ownRoleI
private UserService userS
private CountService countS
private LogService logS
private Count count = new Count();
public Integer getId() {
public void setId(Integer id) {
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getPasswordRepeat() {
return passwordR
public void setPasswordRepeat(String passwordRepeat) {
this.passwordRepeat = passwordR
public String getJbPhone() {
return jbP
public void setJbPhone(String jbPhone) {
this.jbPhone = jbP
public String getJbCredentialsCode() {
return jbCredentialsC
public void setJbCredentialsCode(String jbCredentialsCode) {
this.jbCredentialsCode = jbCredentialsC
public String getCheckNum() {
return checkN
public void setCheckNum(String checkNum) {
this.checkNum = checkN
public Integer[] getOwnRoleIds() {
return ownRoleI
public void setOwnRoleIds(Integer[] ownRoleIds) {
this.ownRoleIds = ownRoleI
public String getNewPassword() {
return newP
public void setNewPassword(String newPassword) {
this.newPassword = newP
public String getConfirmPassword() {
return confirmP
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmP
public void setUserService(UserService userService) {
this.userService = userS
public UserService getUserService() {
return userS
public void setCountService(CountService countService) {
this.countService = countS
public CountService getCountService() {
return countS
public LogService getLogService() {
return logS
public void setLogService(LogService logService) {
this.logService = logS
public Count getCount() {
public void setCount(Count count) {
this.count =
public void prepareToUpdatePage() {
model = userService.getEntity(id);
* 用户登录
* @return success
@Action(value = &UserAction_login&)
public String login() {
Object u = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (u instanceof User && u != null) {
WebContextUtil.getSession().setAttribute(&user&, u);
User user = (User)u;
//使用数据库表TBL_BASE_LOG添加用户登录的日志信息
logService.saveTblBaseLog(WebContextUtil.getRequest(),&当前操作人【&+user.getNickname()+&】登录系统&);
// 防止绕过登陆页面直接执行Action
return &login&;
return SUCCESS;
* 用户密码更新
@Action(value = &UserAction_updateUser&)
public String updateUser() {
if (!newPassword.equals(confirmPassword)) {
this.setMessage(&新密码与确认密码不一致!&);
return &modifyPassword&;
User u = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder(&md5&);
String psw = encoder.encodePassword(newPassword, null);
userService.modifyPassword(u, psw);
this.setMessage(&保存成功!&);
return &modifyPassword&;
* 验证用户名是否存在
* @throws Exception
@Action(value = &UserAction_checkUserName&)
public void checkUserName(){
String result = &0&;
List&User& list = userService.findUserByUserName(username);
if(list != null && list.size() & 0){
result = &1&;
result = &0&;
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
} catch (IOException e) {
throw new RuntimeException(&验证身份证号码出错&, e);
* 验证原始密码是否正确
* @throws Exception
@Action(value = &UserAction_checkPassWord&)
public void checkPassWord() throws Exception {
String result = &0&;
MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder(&md5&);
String pwd = encoder.encodePassword(password, null);
List&User& user = userService.findUserByPassWord(pwd);
if (user != null && user.size() & 0) {
result = &1&;
result = &0&;
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
* 验证手机号码是否存在
@Action(value = &UserAction_checkPhone&)
public void checkPhone(){
String result = &0&;
List&User& list = userService.findUserByPhone(jbPhone);
if(list != null && list.size() & 0){
result = &1&;
result = &0&;
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
} catch (IOException e) {
throw new RuntimeException(&验证手机号码出错&, e);
* 验证身份证号码是否存在
@Action(value = &UserAction_checkCredentialsCode&)
public void checkCredentialsCode(){
String result = &0&;
List&User& list = userService.findUserByCredentialsCode(jbCredentialsCode);
if(list != null && list.size() & 0){
result = &1&;
result = &0&;
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
} catch (IOException e) {
throw new RuntimeException(&验证身份证号码出错&, e);
* 验证验证码是否正确
@Action(value = &UserAction_checkNum&)
public void checkNum(){
String result = &0&;
String check_number_key = (String)WebContextUtil.getSession().getAttribute(&CHECK_NUMBER_KEY&);
if(checkNum != check_number_key && !checkNum.equals(check_number_key)){
result = &1&;
result = &0&;
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
} catch (IOException e) {
throw new RuntimeException(&验证验证码出错&, e);
* 验证短信验证码是否正确
* @throws Exception
@Action(value = &UserAction_checkCode&)
public void checkCode() throws Exception{
String result = &0&;
/** 获取手动输入的手机短信验证码 */
String SmsCheckCode = WebContextUtil.getRequest().getParameter(&SmsCheckCode&);
/** 获取session中存放的手机短信验证码 */
String code = (String) WebContextUtil.getSession().getAttribute(&code&);
if(SmsCheckCode != code && !SmsCheckCode.equals(code)){
result = &0&;
result = &1&;
} catch (Exception e) {
throw new RuntimeException(&短信验证失败&, e);
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
* 验证手机短信是否发送成功
* @throws Exception
@Action(value = &UserAction_sms&)
public void sms() throws Exception {
String result = &0&;
/** 手机号码 */
String jbPhone = WebContextUtil.getRequest().getParameter(&jbPhone&);
/** 短信验证码 */
String code = WebContextUtil.getRequest().getParameter(&code&);
/** 短信验证码存入session(session的默认失效时间30分钟) */
WebContextUtil.getSession().setAttribute(&code&, code);
/** 如何初始化失败返回 */
if(!initClient()) {
/** 单个手机号发送短信的方法的参数准备 */
// 手机号码
String mobilephone = jbP
// 短信内容+随机生成的6位短信验证码
String content = &根据中国证监会举报中心委托,特向您发送此条短信。您的注册验证码为:& +
// 操作用户的ID
Integer operId = Integer.parseInt(Env.getInstance().getProperty(&operId&));
// 定时发送的的发送时间(缺省为空,如果即时发送,填空)
String tosend_time = &&;
// 应用系统的短信ID,用户查询该短信的状态报告(缺省为0,即不需查询短信的状态报告)
int sms_id = 0;
// 黑名单过滤(0:不需要黑名单过滤,1:需要黑名单过滤,缺省为0)
short backlist_filter = 0;
// 禁止语过滤(0:不需要禁止语过滤,1:需要禁止语过滤,缺省为0)
short fbdword_filter = 0;
// 优先级(值越大优先级越高,0:普通,1,:优先,2:最高,缺省为0)
short priority = 0;
// 短信有效时间(格式为:YYYY-MM-DD HH:mm:ss目前为空)
String valid_time = &&;
/** 发送短信之前先统计一个已经发送的短信条数 */
int messageCount = countService.findAllRecord(mobilephone);
(&已发短信条数为:& +messageCount);
if(messageCount & 5){
/** 单个手机号发送短信 */
if (!sendMessage(mobilephone, content, operId, tosend_time, sms_id,
backlist_filter, fbdword_filter, priority, valid_time)) {
result = &0&;// 失败
result = &1&;// 成功
/** 发送一条短信,记录一条短信记录,为了方便之后的统计短信发送次数 */
count.setPhone(mobilephone);// 手机号码
count.setCaptcha(code);// 短信验证码
count.setSendTime(CommonUtil.getNowDate());// 短信发送时间
if(count != null){
countService.saveEntity(count);
(&短信验证码发送记录保存成功!&);
result = &2&;//一个手机号码最多发送5条短信验证码
(&该手机号码今天发送验证码过多&);
HttpServletResponse response = WebContextUtil.getResponse();
response.setContentType(&application/charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
out.write(result.toString());
* WebService客户端初始化
public static boolean initClient() {
* 判断客户端是否已经初始化
if (!SmsWebClient.enable()) {
int ret = 0;
ret = SmsWebClient.init(url, userName, passWord);
if (ret == -1 || !SmsWebClient.enable()) {
(&短信平台接口初始化失败!&);
(&短信平台接口初始化成功!& + ret + &-----&);
} catch (Exception ex) {
ex.printStackTrace();
(&短信平台接口初始化过程中异常!&);
* 单个手机号码发送
* @param mobilephone
* @param content
* @param operId
操作用户的ID
* @param tosend_time
定时发送的发送时间
* @param sms_id
应用系统的短信ID
* @param backlist_filter
黑名单过滤
* @param fbdword_filter
禁止语过滤
* @param priority
* @param valid_time
短信有效时间
public static boolean sendMessage(java.lang.String mobilephone,
java.lang.String content, int operId, java.lang.String tosend_time,
int sms_id, short backlist_filter, short fbdword_filter,
short priority, java.lang.String valid_time) {
// 单个手机号码发送
SmsReturnObj retObj = SmsWebClient.webSendMessage(mobilephone,
content, operId, tosend_time, sms_id, backlist_filter,
fbdword_filter, priority, valid_time);
if (retObj.getReturnCode() != 1) {
(&短信发送失败,原因为:& + retObj.getReturnMsg());
(&短信发送成功!返回结果为:& + retObj.getReturnMsg());
} catch (Exception ex) {
ex.printStackTrace();
(&短信发送过程发生异常!&);
六:具体的短信接口demo到这里下,这里你下载了也不能成功的发送短信,因为你必须要短信平台商给你提供:url,userName,passWord,operId,以及短信平台商还要绑定你的外网ip地址,这样才能真正的发送短信。
Demo下载链接:&
原文:/share/3408.htm
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:542851次
积分:5624
积分:5624
排名:第3478名
原创:136篇
转载:46篇
评论:161条
(4)(2)(5)(2)(2)(1)(1)(4)(2)(4)(3)(3)(2)(4)(3)(1)(5)(2)(6)(3)(2)(7)(6)(22)(11)(4)(8)(1)(12)(8)(8)(10)(24)(1)}

我要回帖

更多关于 免费手机号验证码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信