자바 백 엔 드 에서 인증 코드 백 엔 드 인증 기능 의 실현 코드 생 성
@RequestMapping(value="yzm.action")
public void Yzm(HttpSession session,HttpServletResponse resp){
// 。
int width = 60;
// 。
int height = 20;
//
int codeCount = 4;
int x = 0;
//
int fontHeight;
int codeY;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
x = width / (codeCount + 1);
fontHeight = height - 2;
codeY = height - 4;
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//
Random random = new Random();
//
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// , 。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 。
g.setFont(font);
// 。
// g.setColor(Color.BLACK);
// g.drawRect(0, 0, width - 1, height - 1);
// 160 , 。
g.setColor(Color.BLACK);
for (int i = 0; i < 1; i++) {
int x2 = random.nextInt(width);
int y2 = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x2, y2, x + xl, y2 + yl);
}
// randomCode , 。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// codeCount 。
for (int i = 0; i < codeCount; i++) {
// 。
String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
// , 。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 。
g.setColor(new Color(red, green, blue));
g.drawString(strRand, (i + 1) * x, codeY);
// 。
randomCode.append(strRand);
}
// Session 。
session.setAttribute("validateCode", randomCode.toString());
ServletOutputStream sos;
try {
sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
jsp 페이지 코드 표시,그림 새로 고침 클릭
<td><img id="img" src="yzm.action"/>${validateCode}</td>
<td><input type="text" name="yzma"/><br/></td>
$("#img").click(function(){
$(this).attr("src","yzm.action?"+new Date().getTime());
});
텍스트 상자 의 값 을 배경 으로 전송 하고 인증 코드 를 처음 생 성 한 임 의 수 와 비교 하면 인증 이 완 료 됩 니 다.페이지 에서 받 은 session 의 값 은 인증 코드 보다 한 걸음 늦 기 때문에 배경 으로 검증 합 니 다.여 긴 나 도 무슨 영문 인지 모 르 겠 어.동료 들 에 게 알려 줘...
다른 사고방식,백 엔 드 생 성 랜 덤 수,전단 생 성 캔버스,aax 로 랜 덤 수
//
@RequestMapping(value="random.action")
public void findRandom (HttpServletResponse response) throws IOException{
//
int codeCount = 4;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
//
Random random = new Random();
// randomCode , 。
StringBuffer randomCode = new StringBuffer();
for (int i = 0; i < codeCount; i++) {
// 。
String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
// 。
randomCode.append(strRand);
}
PrintWriter out = response.getWriter();
out.print(randomCode);
}
jsp,jq,js 코드
<body>
<canvas id="canvas" width="70" height="34"></canvas>
<a href="javascript:;" rel="external nofollow" id="img" class="pull-right" style="line-height: 34px;text-indent: 10px;"> </a>
<input type="text" class="form-control" id="yzms" name="yzms" readonly = "readonly" style="display:none" >
</body>
<script type="text/javascript">
$.ajax({
url:"random.action",
success:function(k){
console.log(k)
$("#yzms").attr("value",k);
drawPic();
}
})
$("#img").on("click",function(){
var _this=$(this)
$.ajax({
url:"random.action",
success:function(k){
console.log(k)
$("#yzms").attr("value",k);
drawPic();
}
})
})
/** **/
function randomNum(min,max){
return Math.floor( Math.random()*(max-min)+min);
}
/** **/
function randomColor(min,max){
var r = randomNum(min,max);
var g = randomNum(min,max);
var b = randomNum(min,max);
return "rgb("+r+","+g+","+b+")";
}
/** **/
function drawPic(){
var canvas=document.getElementById("canvas");
var width=canvas.width;
var height=canvas.height;
var ctx = canvas.getContext('2d');
ctx.textBaseline = 'bottom';
/** **/
ctx.fillStyle = randomColor(180,240); //
ctx.fillRect(0,0,width,height);
/** **/
/* for(var i=0; i<4; i++){ */
var txt = $("#yzms").attr("value");
ctx.fillStyle = randomColor(50,160); //
ctx.font = randomNum(15,20)+'px SimHei'; //
var x = 20;
var y = randomNum(20,30);
var deg = randomNum(-45, 45);
//
ctx.translate(x,y);
ctx.rotate(deg*Math.PI/180);
ctx.fillText(txt, 0,0);
//
ctx.rotate(-deg*Math.PI/180);
ctx.translate(-x,-y);
/* } */
/* /** **/
for(var i=0; i<8; i++){
ctx.strokeStyle = randomColor(40,180);
ctx.beginPath();
ctx.moveTo( randomNum(0,width), randomNum(0,height) );
ctx.lineTo( randomNum(0,width), randomNum(0,height) );
ctx.stroke();
}
/** **/
/* for(var i=0; i<100; i++){
ctx.fillStyle = randomColor(0,255);
ctx.beginPath();
ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI);
ctx.fill();
} */
}
효과 표시:총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 자바 백 엔 드 에 인증 코드 백 엔 드 인증 기능 을 생 성 하 는 실현 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.