前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >账号 & 验证码生成代码

账号 & 验证码生成代码

作者头像
收心
发布2022-01-19 15:22:48
1.4K0
发布2022-01-19 15:22:48
举报
文章被收录于专栏:Java实战博客

账号 & 验证码的生成代码

账号生成

代码语言:javascript
复制
import java.util.Random;

/**
 * 账号生成器
 */
public class AccountGenerator {
    // 纯数字
    private final static String[] allnumcode = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",};
    private static Random random = new Random();

    /**
     * 生成号码
     *
     * @param digit 位数
     * @return
     */
    public static String numGenerator(Integer digit) {
        while (true) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < digit; i++) {
                sb.append(allnumcode[random.nextInt(10)]);
            }
            if (Integer.valueOf(sb.toString()) < 10000000) {
                //System.out.println("位数过短 " + sb.toString());
                continue;
            }
            if (!CheckLineNumber(sb.toString(), 4) ||
                    !CheckShunziNumber(sb.toString(), 4)) {
                //System.out.println("其他错误 " + sb.toString());
                continue;
            }
            return sb.toString();
        }

    }


    /**
     * 豹子号_检查
     *
     * @param number 号码
     * @param digit  连续相同位数
     * @return
     */
    public static boolean CheckLineNumber(String number, Integer digit) {
        char[] chars = number.toCharArray();
        int status = 1;
        for (int i = 0; i < chars.length - 1; i++) {
            if (chars[i] == chars[i + 1]) {
                status += 1;
                if (status == digit) {
                    /*System.out.println(number);
                    System.out.println("此号是连号!");*/
                    return false;
                }
            } else {
                status = 1;
            }
        }
        return true;
    }

    /**
     * 顺子号_检验
     *
     * @param number 号码
     * @param digit  位数
     * @return
     */
    public static boolean CheckShunziNumber(String number, Integer digit) {
        char[] chars = number.toCharArray();
        int addstatus = 1;
        int delstatus = 1;
        boolean flag = false;
        for (int i = 0; i < chars.length - 1; i++) {
            if (chars[i] == chars[i + 1] - 1) {
                addstatus += 1;
                if (delstatus == digit) {
                    /*System.out.println(number);
                    System.out.println("此号是加顺子号!");*/
                    return false;
                }
            } else if (chars[i] == chars[i + 1] + 1) {
                delstatus += 1;
                if (delstatus == digit) {
                    /*System.out.println(number);
                    System.out.println("此号是减顺子号!");*/
                    return false;
                }
            } else {
                addstatus = 1;
                delstatus = 1;
            }
        }
        return true;
    }

    /**
     * 测试
     *
     * @param args
     */
    public static void main(String[] args) {
        for (int i = 0; i < 100000; i++) {
            System.out.println(AccountGenerator.numGenerator(7));
            //AccountGenerator.numGenerator(8);
        }
        //CheckShunziNumber("7465789", 3);
    }
}

验证码生成器

代码语言:javascript
复制
import java.util.Random;

/**
 * @author : zanglikun
 * @date : 2021/2/1 11:03
 * @Version: 1.0
 * @Desc : 验证码 不同位数、纯字母、纯数字生成。 有个缺点,有时间 进行修复 :每次 都是 new出来 Random对象 、String[]、StringBuilder对象 看看能不减少生成次数
 */
public class CheckCodeUtil {
    // 纯数字
    private final static String allnumcode = "0,1,2,3,4,5,6,7,8,9";
    // 纯小写字母
    private final static String allcharcode = "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";
    // 大小写字母 数字 混合型
    private final static String allcode = "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,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";

    // 输入验证码长度 生成纯数字验证码
    public static String allnumcode(int num){
        StringBuilder code = new StringBuilder();
        String[] split = allnumcode.split(",");
        Random random = new Random();
        //Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max - min)+min 就可以达到[min,Max]的数了
        for (int i = 0; i < num; i++) {
            code.append(split[random.nextInt(split.length)]);
        }
        return code.toString();
    }

    // 输入验证码长度 生成纯小写字母验证码
    public static String alllowcasecharcode(int num){
        StringBuilder code = new StringBuilder();
        String[] split = allcharcode.split(",");
        Random random = new Random();
        //Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max - min)+min 就可以达到[min,Max]的数了
        for (int i = 0; i < num; i++) {
            code.append(split[random.nextInt(split.length)]);
        }
        return code.toString();
    }

    // 输入验证码长度 生成混合型字母验证码
    public static String allcode(int num){
        StringBuilder code = new StringBuilder();
        String[] split = allcode.split(",");
        Random random = new Random();
        //Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max - min)+min 就可以达到[min,Max]的数了
        for (int i = 0; i < num; i++) {
            code.append(split[random.nextInt(split.length)]);
        }
        return code.toString();
    }

    /**
     * 测试 验证码
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(allnumcode(6));
        System.out.println(alllowcasecharcode(6));
        System.out.println(allcode(6));
    }
}

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 账号生成
  • 验证码生成器
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档