`
tangkuo
  • 浏览: 100512 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

12唯一订单号生成 方法总结

阅读更多
1:  时间戳是当前时间到1970年的毫秒数。
你非要12位可以 :
new Date().getTime()-1300000000000L
这个数至少100年还是12位。而且不会重复



时间戳高并发还是会有重复的,你应该每获取一次加1的方法生成。用锁对象或者把方法声明为synchronized保证并发也不会重复。如果有用数据库,也可以用数据库提供的sequence来帮你生成

抽取一个方法

这种一般都是序号吧 或者一段字符加上序号 每次取得时候加一

java应该用UUID.
或者数据库上SEQ实现



Calendar calendar = Calendar.getInstance();
System.out.println("现在:"+calendar.getTime().getTime());
calendar.add(Calendar.YEAR, 10);
System.out.println("10年后:"+calendar.getTime().getTime());

输出:

现在:1404208483914

10年后:1719827683914

如果用时间戳,截取后面12位,不要第一位,18年内都不会有大问题,不过这样的话,你的生成ID的方法就得同步,避免高并发的时候可能出现的相同ID(理论上很有可能的,虽然1毫秒内出现生成多个订单的几率很小)





package com.tangkuo.utils;

import java.util.Date;
import java.util.UUID;

public class TestNums {
public static void main(String[] args) {
long time = new Date().getTime()-1300000000000L;
System.out.println("=" + time);

System.out.println("System.currentTimeMillis()1 = " + System.currentTimeMillis());
System.out.println("UUID.randomUUID() = " + UUID.randomUUID());
System.out.println("System.currentTimeMillis()2 = " + System.currentTimeMillis());

}

}




package com.iec.app.utils;


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

public class RandomId {
    private Random random;
    private String table;
    private static final int radLength =15;
    private static final String[] radArr = new String[]{"A","B","C","D","E","F","G","H","I","G","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
   
   
    public RandomId() {
        random = new Random();
        table = "0123456789";
    }
    public String randomId(long id) {
        String ret = null,num = String.format("%05d", id);
        int key = random.nextInt(10),seed = random.nextInt(100);
        Caesar caesar = new Caesar(table, seed);
        num = caesar.encode(key, num);
        ret = num  + String.format("%01d", key)  + String.format("%02d", seed);
       
        // 加入生成的随机字符
       /* int letterSize = radLength - ret.length();
        for(int i=0;i<letterSize;i++){
        String letter = radArr[ random.nextInt(radArr.length)];
        int index = random.nextInt(ret.length());
        ret = ret.substring(0, index) + letter + ret.substring(index, ret.length());
        }*/
       
        return ret;
    }
   
   
    public static void main(String[] args) {
        RandomId r = new RandomId();
        System.out.println(r.randomId(12));
    }
}



package com.iec.app.utils;


/**
*
* @author
*
*/
public class Caesar {
    private String table;
    private int seedA = 1103515245;
    private int seedB = 12345;
   
    public Caesar(String table, int seed) {
        this.table = chaos(table, seed, table.length());
    }
    public Caesar(String table) {
        this(table, 11);
    }
    public Caesar() {
        this(11);
    }
    public Caesar(int seed) {
        this("ABCDEFGHIJKLMNOPQRSTUVWXYZ", seed);
    }
    public char dict(int i, boolean reverse) {
        int s = table.length(), index = reverse ? s - i : i;
        return table.charAt(index);
    }
    public int dict(char c,  boolean reverse) {
        int s = table.length(), index = table.indexOf(c);
        return reverse ? s - index : index;
    }
    public int seed(int seed) {
        long temp = seed;
        return (int)((temp * seedA + seedB) & 0x7fffffffL);
    }

    public String chaos(String data, int seed, int cnt) {
        StringBuffer buf = new StringBuffer(data);
        char tmp; int a, b, r = data.length();
        for (int i = 0; i < cnt; i += 1) {
            seed = seed(seed); a = seed % r;
            seed = seed(seed); b = seed % r;
            tmp = buf.charAt(a);
            buf.setCharAt(a, buf.charAt(b));
            buf.setCharAt(b, tmp);
        }
        return buf.toString();
    }

    public String crypto(boolean reverse,
                         int key, String text) {
        String ret = null;
        StringBuilder buf = new StringBuilder();
        int m, s = table.length(), e = text.length();

        for(int i = 0; i < e; i += 1) {
            m = dict(text.charAt(i), reverse);
            if (m < 0) break;
            m = m + key + i;
            buf.append(dict(m % s, reverse));
        }
        if (buf.length() == e)
            ret = buf.toString();
        return ret;
    }
    public String encode(int key, String text) {
        return crypto(false, key, text);
       
    }
    public String decode(int key, String text) {
        return crypto(true , key, text);
    }
   
    public static void main(String[] args) {
        Caesar caesar = new Caesar();
        String data = caesar.encode(32, "APPLE");
        caesar.decode(32, data);
    }
}
分享到:
评论

相关推荐

    JAVA生成订单号(日期+流水号)

    2. **订单号生成**:`Getnum()`和`Getnum1()`方法分别实现了包含不同随机数长度的订单号生成逻辑。 ```java String t = getStringDate(); int x = (int) (Math.random() * 90) + 10; String serial = t + x; ...

    c#后台生成不重复的订单号及后台存储过程

    根据提供的标题、描述、标签以及部分内容...通过这两种不同的方法,我们可以生成多种格式的订单号,满足业务需求的同时确保数据的唯一性和准确性。此外,使用枚举类型、存储过程等方式可以提高代码的可维护性和扩展性。

    银联订单号永远不会重复的生成算法分析与示例

    银联订单号生成算法是为了确保在高并发环境下生成的订单号具有唯一性,同时考虑到16位数字的限制。在设计此类算法时,主要需要解决以下几个问题:避免数据库同步问题、时间精度与位数限制、数据库自增字段的并发压力...

    C#生成唯一不重复订单号

    在C#编程中,生成唯一不重复的订单号是一个常见的需求,特别是在电商系统中,确保每个订单具有唯一...同时,也可以结合数据库的自增字段或分布式ID生成服务(如Snowflake算法)来实现更高效、更安全的订单号生成机制。

    《模拟订单号生成(Java)》实验报告

    ### 模拟订单号生成(Java)实验报告 #### 一、实验背景 随着电子商务行业的快速发展,订单系统作为电商平台的核心组成部分之一,其稳定性和高效性至关重要。订单号作为标识每笔交易唯一性的关键字段,在系统设计...

    用JS实现根据当前时间随机生成流水号或者订单号

    在当前互联网环境下,为了确保每一笔交易都有一个唯一的标识,生成流水号或订单号是必不可少的环节。流水号与订单号的区别主要在于用途不同,流水号一般用于系统内部管理,而订单号是面向客户的,便于用户查询和确认...

    快递运单号生成器1.0.永久免费.zip

    总结来说,"快递运单号生成器1.0.永久免费.zip"是一款实用的工具,它简化了快递运单号的生成过程,提升了物流管理的效率,同时也为企业节省了成本。对于那些处理大量订单的电商从业者来说,这无疑是一个值得尝试的...

    生成订单编码

    这需要开发相应的函数或方法来确保每次生成的编号都是唯一的。 8. **数据库管理**:生成的订单编号会被存储在数据库中,作为订单记录的关键字段。这需要数据库设计合理,确保编号字段的数据类型能容纳所有可能的...

    利用时间生成8位不重复数

    在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...

    利用sql函数生成不重复的订单号的代码

    总结一下,这段代码的核心在于使用SQL函数生成不重复的订单号,通过锁定相关表来确保并发安全,同时通过日期和递增数字来保证唯一性。这种方法适用于单个数据库环境,但若涉及分布式系统或高并发场景,可能需要更...

    序列号生成器

    - **分布式系统中的唯一ID生成**:如电商平台的商品编号、订单号等。 - **日志追踪**:为每次请求生成唯一的标识符,方便追踪和调试。 - **数据持久化**:在数据库中作为主键使用,确保每一行记录都有唯一的标识。 ...

    金蝶K3 Wise 用SQL生成单号(单据编号)及单据内码(单据ID)

    这个过程通常用于获取当前业务单据的最大序列号,以确保新生成的单据内码是唯一的。例如,如果我们要为POrequest类型的单据生成内码,可以这样操作: ```sql declare @p2 int exec GetICMaxNum 'POrequest',@p2 ...

    随机码生成器

    总结来说,随机码生成器是一个强大的工具,能够为IT专业人士提供各种类型和长度的随机字符串。理解和掌握其工作原理与应用场景,对于提高系统安全性和效率有着重要的意义。在实际操作中,选择合适的生成器并正确使用...

    如何通过C#实现单据号码的自动增加

    这种单据编号的自动生成机制适用于各种需要按顺序生成唯一编号的场景,如订单编号、发票编号等。通过这种方式可以确保编号的唯一性和连续性,同时减少手动输入的错误。 #### 总结 通过上述分析,我们可以看出,...

    Sql 函数获取订单交易流水号

    3. **性能考量**: 当大量并发访问时,需要考虑流水号生成的唯一性和效率问题。 4. **可扩展性**: 如果未来需要支持更多的流水号前缀或者不同的日期格式,可以适当调整函数内部逻辑。 #### 七、总结 该SQL函数提供了...

    随机产生8位无重复数

    在IT行业中,生成随机数是一项常见的任务,尤其在软件...这个系统不仅可以用于生成用户编号,还可以扩展到其他需要唯一标识的场景,如订单号、验证码等。在实际开发中,这样的设计有助于提高系统的灵活性和可维护性。

    java超市订单管理系统ssm.rar

    系统会记录订单的详细信息,如商品ID、数量、总价等,并生成唯一的订单号。同时,系统提供了订单状态的跟踪,如待支付、已支付、已发货、已完成等。 3. 用户管理:支持用户注册、登录、密码修改等功能。每个用户有...

    PHP实现RSA签名生成订单功能【支付宝示例】

    - 使用`time()`获取当前时间戳,然后通过`substr()`截取去掉第一位,与`mt_rand(10000, 99999)`生成的随机数结合,创建一个唯一的订单号。这确保了每个订单都有一个独一无二的标识符。 2. **组合签名参数**: - ...

    C#实现 用时间做序号

    - **订单号生成**:在线商城等系统中,可以使用时间戳作为订单号的一部分,确保订单号的唯一性。 - **文件名生成**:在批量处理文件时,可以用时间戳作为文件名的一部分,避免文件名重复。 #### 5. 进一步优化 - **...

Global site tag (gtag.js) - Google Analytics