验证码校验

问题:随机生成一组验证码,输入并比较是否输入正确。

代码:

//定义验证字符
        char ver[] = {'0','1','2','3','4','5','6','7','8','9','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','m','n','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'};
        //计算数组长度
        int length = sizeof(ver)/sizeof(char);
        //产生随机数下标
        Byte n1 = arc4random() % length;
        Byte n2 = arc4random() % length;
        Byte n3 = arc4random() % length;
        Byte n4 = arc4random() % length;
        //产生随机数
        char a = ver[n1];
        char b = ver[n2];
        char c = ver[n3];
        char d = ver[n4];
        printf("Verification code:%C %C %C %C\n",a,b,c,d);
        //定义输入验证码字符
        char num1[6];
        printf(" please input Verification code:\n");
        scanf("%s",num1);
        char A = num1[0];
        char B = num1[1];
        char C = num1[2];
        char D = num1[3];
<span style="white-space:pre">	</span>//使用while循环验证
        while(!( A== a & B == b & C == c & D == d)){
            printf("error,please input again:\n");
            scanf("%s",num1);
            A = num1[0];
            B = num1[1];
            C = num1[2];
            D = num1[3];
        }
        printf("input right\n");


验证码生成与校验在防治计算机恶意请求服务器方面有重要作用,以下是相关方法和技术介绍。 ### 验证码生成 在Springboot中,生成验证码时,在未生成图片的时候,就将4位验证码字符先存入session,以‘JCCODE’作为存取session的key。同时验证码的生成可采用生成图片技术,在PHP中使用GD扩展完成,实现需加载扩展并重启Apache httpd服务 [^1][^2]。 ### 验证码校验 在Springboot里,校验验证码可提供一个接口,在接口中收到调用端传过来的校验码,然后从session取出验证码,将两个验证码都全部转小写,进行无大小写区分匹配校验,最后返回true或false [^1]。 ### 示例代码(Springboot简单示例) ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Random; public class CaptchaUtil { // 生成验证码 public static String generateCaptcha(HttpServletRequest request) { String captcha = generateRandomString(4); HttpSession session = request.getSession(); session.setAttribute("JCCODE", captcha); return captcha; } // 生成随机字符串 private static String generateRandomString(int length) { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; StringBuilder captcha = new StringBuilder(); Random random = new Random(); for (int i = 0; i < length; i++) { int index = random.nextInt(characters.length()); captcha.append(characters.charAt(index)); } return captcha.toString(); } // 校验验证码 public static boolean verifyCaptcha(HttpServletRequest request, String inputCaptcha) { HttpSession session = request.getSession(); String storedCaptcha = (String) session.getAttribute("JCCODE"); if (storedCaptcha != null && inputCaptcha != null) { return storedCaptcha.toLowerCase().equals(inputCaptcha.toLowerCase()); } return false; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值