生成4位不重复的字符串

2023-11-03

实际的业务场景中需要生成4位不重复的字符串,这个场景比较特殊,不具有普遍性,正常场景的唯一单号都不会只有4位。

最先想到的是随机生成4位字符串,字符包括数字、大小写字母一共62位,基本可以满足使用要求,但是越到后面,重复的概率就会越大。想要保证不重复,可以加入时间戳,机器id等,类似雪花算法的思路,但是长度都比较长,将其映射为4位长度的字符串有点困难。

只能换一个思路,通过递增的方式来保证唯一性,递增可以借助数据库实现。同时将10进制转换为62进制可以满足4位长度的限制。这样10进制的最大值为 14776335,基本满足我们现在的业务场景。

以下为参考代码:

public class UniqueStrUtils {
    private static String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    private static int scale = 62;
    private static long MAX = 14776335;

    public static String convert62(long num) throws Exception {
        if (num > MAX) {
            throw new Exception("too large");
        }
        StringBuilder sb = new StringBuilder();
        int remainder = 0;
        while (num > scale - 1) {
            remainder = Long.valueOf(num % scale).intValue();
            sb.append(chars.charAt(remainder));
            num = num / scale;
        }
        sb.append(chars.charAt(Long.valueOf(num).intValue()));
        String value = sb.reverse().toString();
        return StringUtils.leftPad(value, 4, '0');
    }

    public static long convert10(String str) {
        str = str.replace("^0*", "");
        long num = 0;
        int index = 0;
        for (int i = 0; i < str.length(); i++) {
            index = chars.indexOf(str.charAt(i));
            num += (long) (index * (Math.pow(scale, str.length() - i - 1)));
        }
        return num;
    }


}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成4位不重复的字符串 的相关文章

随机推荐

  • 构建Hadoop集群实验

    1 在 后输入cd home 命令 进入home目录下 在 后输入vi Dockerfile命令 创建并编辑一个Dockerfile文件 示例代码如下 root xxx home vi Dockerfile 按i 小写 键 进入编辑模式 将
  • SpringBoot 中间件设计和开发

    作者介绍 小傅哥 一线互联网 java 工程师 架构师 开发过交易 营销 写过运营 活动 设计过中间件也倒腾过中继器 IO板卡 不只是写Java语言 也搞过C PHP 是一个技术活跃的折腾者 我的博客 bugstack cn 我的Githu
  • React-Router v6 新特性解读及迁移指南

    前言 18年初 React Router的主要开发人员创建一个名为Reach Router的轻量级替代方案 原来是相互抗衡的 却没想React Router直接拿来合并 真香 目前 v6已是测试最后一版 估计新的特性不出意外就是下面这些了
  • fig, ax = plt.subplots(figsize = (a, b))解析 与 plt.subplot()函数解析

    文章目录 1 fig ax plt subplots figsize a b 解析 2 plt subplot 函数解析 可视化基础 这个链接非常重要 1 fig ax plt subplots figsize a b 解析 在matplo
  • rabbitmq基础5——集群节点类型、集群基础运维,集群管理命令,API接口工具

    文章目录 一 集群节点类型 1 1 内存节点 1 2 磁盘节点 二 集群基础运维 2 1 剔除单个节点 2 1 1 集群正常踢出正常节点 2 1 2 服务器异常宕机踢出节点 2 1 3 集群正常重置并踢出节点 2 2 集群节点版本升级 2
  • Redis漏洞总结

    Redis简介 redis是一个key value存储系统 和Memcached类似 它支持存储的value类型相对更多 包括string 字符串 list 链表 set 集合 zset sorted set 有序集合 和hash 哈希类型
  • 通过执行在 shell脚本中的命令,进入指定目录:source命令、点命令

    目录 在shell脚本里切换目录 执行shell脚本进入指定目录 Linux下通过Shell脚本快速进入指定目录 参考 Linux下通过Shell脚本快速进入指定目录 https blog csdn net han8040laixin ar
  • 智能制造中的高频应用技术之回归模型

    前言 当我们把基于数据驱动的方法和人工智能等技术引入工业 制造业领域时 会发现这样的应用场景与一般应用场景的一个重要差异是重视回归模型 一般AI应用场景与商业数据分析场景下 我们相对重视分类 聚类模型 这些模型对我们希望认知的目标形成定性判
  • 海外版“咸鱼”Carousell是什么?

    做跨境的都知道 一定不能只在一颗树上吊死 潮流总是把你推着向前的 现在跨境电商平台一样层出不穷 今天就来跟大家分享最近发现比价好做的外贸电商平台APP Carousell 号称海外版 咸鱼 它的功能也与咸鱼是差不多的 细心的老板会发现 咸鱼
  • 在c语言编程中float类型怎么比较大小?

    比较实数的大小时 由于一般情况下一个实数不能用有限位的二进制表示 所以会存在误差 当我们要比较二个实数是否相等时 不要使用 的比较运算符 而是用二个实数差的绝对值是否小于一个我们限定的值 比如比较一个float型与0的大小 应该用 if x
  • Error in created hook: “Error: Initialize failed: invalid dom.“

    报错解析 初始化时没有获取到DOM元素 原因分析 我这边在 created l里做了一个refresh的一个定时刷新方法 但因为我将 refresh 方法放到后面就导致先是加载了 生产统计 能源监控 质量墙 生产进度监控 等这几个方法 最后
  • Go语言面试题--进阶语法(31)

    文章目录 1 关于 channel 下面描述正确的是 2 下面的代码有几处问题 请详细说明 3 下面的代码有什么问题 4 下面的代码输出什么 1 关于 channel 下面描述正确的是 A 向已关闭的通道发送数据会引发 panic B 从已
  • vue遍历输出列表中以逗号隔开的字符串

    问题描述 后台接口返回一个以逗号隔开的字符串 在列表中需要将逗号隔开的字符串便利并将对应的用户编号转换成为用户姓名 代码展示 列表代码
  • Spring事务(三)——传播属性之REQUIRED

    事务是与连接对象紧密相关的 事务属性用来控制事务流转 Spring事务的传播属性有以下几种 Propagation REQUIRED 如果当前没有事务 就新建一个事务 如果已经存在一个事务中 则加入到这个事务中 默认属性 也是最常使用 Pr
  • Linux中修改MAC地址和IP地址的命令(netset、ip、ifconfig)

    修改MAC地址 ip link set eth0 address aa aa aa aa aa aa 解析 eth0是网卡的名字 可以用ifconfig命令查看 aa aa aa aa aa aa是想要修改后的MAC地址 修改IP地址 1
  • webBrowser对跳转后的页面的处理

    代码 using System using System Collections Generic using System ComponentModel using System Data using System Drawing usin
  • 浏览器检查页面的几种方式 b7faf554fecf4718b9bf5035708ff528

    浏览器检查页面的几种方式 前言 初学前端和爬虫的小伙伴应该有会遇到很多让人很头疼的小问题 例如 再遇到一个很有趣的网页时 想要探究一下这个网站的页面构造 但是在尝试鼠标右键时却无法像其他网站一样出菜单 在比如要对某个网站进行抓包 想要进入开
  • AIGC时代的王者:微软

    从2022年到2023年这不到一年的时间 AI圈经历两大爆火事件 Stable diffusion和chatGPT 正式宣布AIGC时代的到来 在这背后有一家一直被认为科技创新性较弱的公司在默默的努力着 田字牌即微软 chatGPT爆火之前
  • 原来tuxera ntfs for Mac激活码这么容易获取

    因为Tuxera NTFS可以帮助我们在Mac上完全读写NTFS磁盘 所以非常受大家的欢迎 这款软件可以使用一段时间 让大家体验它的便捷性 不过在试用期过去之后就需要我们激活这款软件才可以继续使用的 那么怎么才能正确获得Tuxera NTF
  • 生成4位不重复的字符串

    实际的业务场景中需要生成4位不重复的字符串 这个场景比较特殊 不具有普遍性 正常场景的唯一单号都不会只有4位 最先想到的是随机生成4位字符串 字符包括数字 大小写字母一共62位 基本可以满足使用要求 但是越到后面 重复的概率就会越大 想要保