使用id生成6位数(字母加数字),亲测不会重复

package cn.wkgb.common.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**

  • 根据id生成6位数
  • @author Administrator

/
public class ShareCodeUtil {
/
*
* 邀请码生成器,算法原理:
* 1) 获取id: 1111111
* 2) 使用自定义进制转为:gpm6
* 3) 转为字符串,并在后面加’O’字符:gpm6o
* 4)在后面随机产生若干个随机数字字符:gpm6o7
* 转为自定义进制后就不会出现o这个字符,然后在后面加个’o’,这样就能确定唯一性。最后在后面产生一些随机字符进行补全。
*/

    /** 自定义进制(0,1没有加入,容易与o,l混淆) */private static final char[] r=new char[]{'Q', 'W', 'E', '8', 'A', 'S', '2', 'D', 'Z', 'X', '9', 'C', '7', 'P', '5', 'I', 'K', '3', 'M', 'J', 'U', 'F', 'R', '4', 'V', 'Y', 'l', 'T', 'N', '6', 'B', 'G', 'H'};/** (不能与自定义进制有重复) */private static final char b='O';/** 进制长度 */private static final int binLen=r.length;/** 序列最小长度 */private static final int s=6;/*** 根据ID生成六位随机码* @param id ID* @return 随机码*/public static String toSerialCode(long id) {char[] buf=new char[32];int charPos=32;while((id / binLen) > 0) {int ind=(int)(id % binLen);buf[--charPos]=r[ind];id /= binLen;}buf[--charPos]=r[(int)(id % binLen)];String str=new String(buf, charPos, (32 - charPos));// 不够长度的自动随机补全if(str.length() < s) {StringBuilder sb=new StringBuilder();sb.append(b);Random rnd=new Random();for(int i=1; i < s - str.length(); i++) {sb.append(r[rnd.nextInt(binLen)]);}str+=sb.toString();}return str;}public static long codeToId(String code) {char chs[]=code.toCharArray();long res=0L;for(int i=0; i < chs.length; i++) {int ind=0;for(int j=0; j < binLen; j++) {if(chs[i] == r[j]) {ind=j;break;}}if(chs[i] == b) {break;}if(i > 0) {res=res * binLen + ind;} else {res=ind;}}return res;}public static void main(String[] args) {Map<String, Object> map = new HashMap<String, Object>();int a=0;for (int i = 0; i < 10000000; i++) {String s = toSerialCode(i);if (map.get(s)!=null) {a++;}else {map.put(s, "2");}}System.out.println(a);}

}

使用id生成6位数(字母加数字),亲测不会重复相关推荐

  1. Random随机生成几位数字和UUID随机生成几位字母加数字组合

    Random随机生成几位数字和UUID随机生成几位字母加数字组合 public class TestRandom { public static void main(String[] args) { ...

  2. SM2 生成公钥私钥 签名 加解密 亲测可用

    引入pom依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava< ...

  3. java生成大小写字母加数字的随机数

    项目中用到一授权码,网上搜索资源整理后发表 public class Random {/*** 生成32位大小写加数字随机数* @param args*/public static void main ...

  4. python生成随机验证码(字母加数字的组合)

    目录 一.题目描述 二.解析 三.random用法: 四.源码 一.题目描述 写一个函数,生成指定长度的验证码,验证码由英文字母和数字构成 二.解析 此题为随机产生n位的验证码,而且要求为字母加数字的 ...

  5. php用字母数字生成用户名,请问生成字母加数字

    请教生成字母加数字 有26个字母{a-Z}和10个数字{0-9} 如果要生成8位字符的,区分大小写, 这样的排列是(26+26+10)8次方=218340105584896个,这218万亿 但相邻不能 ...

  6. 密码是6-16位字母加数字的正则表达式和验证手机号码的正则表达式

    [转载请注明出处:From李诗雨---http://blog.csdn.net/cjm2484836553/article/details/78598264] 不诗意的女程序猿不是好厨师~ 恩,正则表 ...

  7. formValidator正则校验密码大小写字母加数字

    RegexValidator:   属性 属性名称 默认值 详细解释 regexp 正则表达式 "" 采用的是显式构造函数new RegExp("pattern" ...

  8. 正则【大写字母加数字,加顿号,加“至”字】

    ['validate-traffic-stubArea',function (v1) {var v=v1;var rex=/[A-Z0-9\u4e00-\u9fa5]+$/;var rex2=/^至+ ...

  9. java获取A001、A002...到ZZZZ的流水号算法(字母加数字)

    在项目开发中,经常遇到流水号生成的问题.需求:生成4位的流水号,从A001.A002一直递增到ZZZZ结束. 主要思路:分为字母和数字两部分,分情况进行考虑处理,主要在于如何处理临界点的进位问题. j ...

最新文章

  1. 树莓派与Android客户端进行socket通信
  2. 第八章 熟练dom的几个常用方法
  3. 手把手带你撸一把springsecurity框架源码中的认证流程
  4. 【嵌入式】C语言高级编程-内联函数(10)
  5. python tkinter教程 博客园_python tkinter教程-事件绑定
  6. Drools DMN最新开源引擎性能改进
  7. 【Bash】实现指定目录下的文件编码转换,以原文件名保存
  8. Java提高篇 —— 抽象类与接口
  9. 论文浅尝 | 图神经网络的对抗攻击和防御相关文献集
  10. IP分类以及子网掩码
  11. VMware虚拟机XP系统安装
  12. 【CV】MLP-Mixer:用于CV任务的全 MLP 架构
  13. 火狐浏览器打不开html,火狐浏览器打不开网页的原因及解决办法
  14. 水星mw300r虚拟服务器,水星MW300R无线路由器如何设置【组图】
  15. 学习Matlab第三天——画3D图
  16. Cesium|xt3d卫星正摄动画
  17. pod init 报错 can‘t modify frozen String (FrozenError) [Xcodeproj] Unknown object version (56).
  18. (完结项目)fpga采集双路CCD摄像头1000帧图像上传到上位机显示
  19. android开发百度地图定位到大西洋去了!!
  20. 查看当前代码的php版本,如何查看php版本

热门文章

  1. 数学界的扫地僧们(转)
  2. android 邮件发送
  3. iOS支付指南:POS终端刷卡流程、银联55域TLV子域信息说明、银联前置、NFC
  4. 数据中心100G高速光模块主流技术分析与市场分析
  5. 【 Tomcat 】
  6. 微信小程序正则表达式判断邮箱格式
  7. Nao机器人的基本操作与控制
  8. 爬取某电影网站(未写完)
  9. 【小程序项目分享】闲置车位共享小程序
  10. css 铺满父元素的最好用的一种方式