怎样用java实现验证码

怎样用java实现验证码,第1张

现在许多系统的注册 登录或者发布信息模块都添加的随机验证码功能 就是为了避免自动注册程序或者自动发布程序的使用

验证码实际上就是随机选择一些字符以图片的形式展现在页面上 如果进行提交 *** 作的同时需要将图片上的字符同时提交 如果提交的字符与服务器session保存的不同 则认为提交基数信息无效 为了避免自动程序分析解析图片 通常会在图片上随机生成一些干扰线或者将字符进行扭曲 增加自动识别验证码的难度

在这里 我们使用java实现验证码

<%@ page contentType= image/jpeg import= java awt * java awt image * java util * javax imageio * %>

<%!

Color getRandColor(int fc int bc){//给定范围获得随机颜色

Random random = new Random()

if(fc>) fc=

租锋做if(bc>) bc=

int r=fc+random nextInt(bc fc)

int g=fc+random nextInt(bc fc)

int b=fc+random nextInt(bc fc)

return new Color(r g b)

}

%>

<%

//设置页面不缓存

response setHeader( Pragma No cache )

弊衡response setHeader( Cache Control no cache )

response setDateHeader( Expires )

// 在内存中创建图象

int width= height=

BufferedImage image = new BufferedImage(width height BufferedImage TYPE_INT_RGB)

// 获取图形上下文

Graphics g = image getGraphics()

//生成随机类

Random random = new Random()

// 设定背景色

g setColor(getRandColor( ))

g fillRect( width height)

//设定字体

g setFont(new Font( Times New Roman Font PLAIN ))

// 随机产生 条干扰线 使图象中的认证码不易被其它程序探测到

g setColor(getRandColor( ))

for (int i= i<i++)

{

int x = random nextInt(width)

int y = random nextInt(height)

int xl = random nextInt( )

int yl = random nextInt( )

g drawLine(x y x+xl y+yl)

}

// 取随机产生的认证码( 位数字)

String codeList = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

String sRand=

for (int i= i<i++){

int a=random nextInt(codeList length() )

String rand=codeList substring(a a+ )

sRand+=rand

// 将认证码显示到图象中

g setColor(new Color( +random nextInt( ) +random nextInt( ) +random nextInt( )))//调用函数出来的颜色相同 可能是因为种子太接近 所以只能直接生成

g drawString(rand *i+ )

}

// 将认证码存入SESSION

session setAttribute( rand sRand)

// 图象生效

g dispose()

// 输出图象到页面

ImageIO write(image JPEG response getOutputStream())

out clear()

out = pageContext pushBody()

lishixinzhi/Article/program/Java/hx/201311/25536

原理:

1.随机生成4个数字 用到晌乱了Random类

2.对这4个数字设置字体格式 用 setFont方法

3.改变字体颜色用setColor 然后随机生成颜色

代码如下

package s1

import java.awt.Color

import java.awt.Font

import java.awt.Graphics

import java.awt.image.BufferedImage

import java.io.IOException

import java.io.PrintWriter

import java.util.Random

import javax.imageio.ImageIO

import javax.jms.Session

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import javax.servlet.http.HttpSession

public class GetImage extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response)

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 发送图片不能够添加这2行代码

// response.setContentType("text/htmlcharset=UTF-8")

//request.setCharacterEncoding("UTF-8")

int width=100

int height=50

//获得一张图片

BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)

Graphics g=image.getGraphics()

g.setColor(Color.WHITE)

g.fillRect(1, 1, width-2, height-2)

g.setFont(new Font("宋体",Font.BOLD,30))

Random random=new Random()

//填充的字符串

String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

//缓存生成的验证码

StringBuffer stringbuffer=new StringBuffer()

//随机生成验证码的颜色和字符

for(int i=0i<4i++)

{ //宴尺档设置随机颜色

g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)))

int index=random.nextInt(62)//这里的62就是从填充字符段中随意选困早取一个位置

String str1=str.substring(index,index+1)

g.drawString(str1, 20*i, 30)//x,y数值设置太小会显示不出来

stringbuffer.append(str1)

}

//将生成的验证码存到服务器

request.getSession().setAttribute("checkcode", stringbuffer.toString())//key和value

//将图片发送给浏览器

ImageIO.write(image, "jpg", response.getOutputStream())

}

}

用户登录界面代码

package s1

import java.io.IOException

import java.io.PrintWriter

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import javax.servlet.http.HttpSession

public class Login extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/htmlcharset=UTF-8")// 设置服务器发送给浏览器的编码方式

request.setCharacterEncoding("UTF-8")// 客户端向服务器提交的数据的解码方式

// 获得用户提交的数据

String checkcode = request.getParameter("checkcode")

System.out.println(checkcode)

// 判断输入的验证码是不是符合

HttpSession session = request.getSession()// session是存放数据的地方

String str = (String) session.getAttribute("checkcode")

if (str != null) {

if (checkcode.compareToIgnoreCase(str) == 0) // 验证码忽略大小写

response.getWriter().println("验证码输入正确")

else

response.getWriter().println("验证码输入错误")

}

else response.getWriter().println("验证码失效")

// 使用完的验证码信息要删除,返回原页面再输一次,验证码就失效了

session.removeAttribute("checkcode")

}

}

近日,微信推出全国首张微信身份z“网证”,也就是用户可以办理自己的网上证件及身份凭证了!那扮塌么在哪里办理这个网证呢?感兴趣的小伙伴可以跟我一起来看看哦!

网证CTID微信小程序入口

1、首先打开微信,点击在朋友圈下方的小程序

2、打开微信小程序,搜索【网证ctid】

3、然后打开【网证ctid】

微信第三代身份z网证CTID在线办理程序

打开微信小程序网证CTID小程序,注册身份信息,涮脸“扫一扫”,立刻核对身份,证明“我就是我”。

有了这款网证CTID小程序,以后不需要实体身份z,只需拿出手机“涮脸”比对,即可迅速实现“人证合一”。

用户直接打开微信小程序网证CTID,填写个人信息并设置身份z认证码后“涮脸”进行人像采集,相关信息发送至后台身份信息数据库进行比对验证,不过几秒钟便显示“验证成功”的标识颂稿,一张电子身份z“网证厅樱圆”随即生成。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12368423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存