栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java抽奖码生成

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java抽奖码生成

本案要求生成10W条由大写字母加数字组成的抽奖码。

由要求得字符集为:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

为保证数据不重复,且不可破解的要求。阿咚使用5位的随机字符,加5位由10进制的序列号转为36进制的字符组成。该10进制每使用一次加一,以保证数据的唯一性。如果该抽奖码是多次生成,可以将每次生成后最大的序列号保存在数据库,以便迭代使用。

具体代码如下:

import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class LuckyDrawCode {
	
	private static  String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	
	private static  int baseSystem=ALPHABET.length();
	
	private static Random rand  = new Random();
	
	private static AtomicInteger ai=new AtomicInteger(1500624);
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int j=0;j<10;j++) {
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < 5; i++) {
				int number =  rand.nextInt(baseSystem);
				sb.append(ALPHABET.charAt(number));
			 }
			 System.out.println(sb.toString()+encoding( ai.incrementAndGet()));
		}
		
	}
	
	private static  String encoding(long num) {
        if(num < 1)
            throw new IllegalArgumentException("num must be greater than 0.");

        StringBuilder sb = new StringBuilder();
        for (; num > 0; num =num/ baseSystem) {
            sb.append(ALPHABET.charAt((int) (num % baseSystem)));
        }

        return sb.toString();
    }
	
    private  long decoding(String str) {
        if(str==null || str.trim().length() == 0 ){
            throw new IllegalArgumentException("str must not be empty.");
        }

        long result = 0;
        for (int i = 0; i < str.length(); i++) {
            result += ALPHABET.indexOf(str.charAt(i)) * Math.pow(baseSystem, i);
        }

        return result;
    }
}

ps:项目中使用的时候,只要更换自己的字符集即可,如果要求抽奖吗长度之类,微调就好。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号