- 浏览: 100512 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (209)
- http://docs.jpush.io/server/java_sdk/ (1)
- SpingMVC ModelAndView (1)
- Model (1)
- Control以及参数传递 (1)
- https://www.alipay.com/ (1)
- 检查指定的字符串列表是否不为空。 (1)
- 转自http://my.oschina.net/rpgmakervx/blog/505434 (1)
- 压缩js (1)
- 含包含 字母数字校验 (1)
- 判断浏览器是ie (1)
- fixbox (0)
- 转自http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html (1)
- http://dl2.iteye.com/upload/attachment/0113/2406/afbd8d53-dcad-3afc-8d78-41c1591 (0)
- IDEA (0)
- maven搭建 (0)
- http://www.jeasyuicn.com/api/docTtml/index.htm (1)
- 给tomcat添加运行内存: (1)
- JPUSH推送 (1)
- requestScope (0)
- oracle中plsql安装client10连接数据库 (1)
- 不需要安装oracle11g (1)
- tuikuan (1)
- http://www.hjxmall.com/index.php (1)
- java (1)
- 参考 (1)
- xml签名验签模拟程序 (1)
- 技术网站收集分享 (1)
- Java NIO提供了与标准IO不同的IO工作方式 ------来源于 http://www.iteye.com/magazines/132-Java-NIO (1)
- oracle表查询语句优化 (0)
- oracle (5)
- a (1)
- TenpayHttpClient (2)
- mongodb (1)
- http://www.qcloud.com/product/cmongo.html?utm_source=pcsem1&utm_medium=bdgj46&utm_campaign=baidu (1)
- SpringMVC整合MongoDB开发 (0)
- SpringMVC整合MongoDB开发 https://www.mongodb.org (1)
- Java 语言中常见问题总结 (1)
- 数据库SQL优化大总结 (1)
- 拦截器与过滤器的区别 (1)
- Struts2中拦截器与过滤器的区别及执行顺序 (1)
- Spring声明式事务管理与配置 (0)
- oracle OPERTION (1)
- java 高并发多线程开发 (1)
- Collection 与 map 接口相关集合 (1)
- 多线程开发实践 (1)
- JVM调优总结 转自 http://www.importnew.com/18694.html (1)
- redis 五种数据类型的使用场景 转自于 http://blog.csdn.net/gaogaoshan/article/details/41039581 (1)
- HttpWatch http基础 来自于http://blog.csdn.net/gaogaoshan/article/details/21237555 (1)
- maven 远程仓库 http://blog.csdn.net/gaogaoshan/article/details/40266779 (1)
- 生成Webservice客户端的4中方法 http://blog.csdn.net/gaogaoshan/article/details/8980775 (1)
- http://fgh2011.iteye.com/blog/1564283 (1)
- sleep和wait有什么区别 http://xiaowei2002.iteye.com/blog/2174188 (1)
- JDK中常用包及其类 常见的几种RuntimeException (1)
- Java的运行原理 (1)
- mybatis缓存的使用及理解 http://my.oschina.net/dxqr/blog/123163 (1)
- 软件架构设计分析 (1)
- redis技术总结 (3)
- java面试总结知识点 (1)
- ZooKeeper技术 (1)
- Hadoop (1)
- sso单点登录 (1)
- SpringIOC (1)
- 书签ssssssssssssssssssssss (1)
- spring事务的隔离级别 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html (1)
- 秒杀系统架构分析与实战 http://www.importnew.com/18920.html (1)
- oracle 连接plsql配置 (1)
- maven工程集成springmvc http://blog.csdn.net/fox_lht/article/details/16952683 (1)
- java类序列化与反序列化版本唯一号serialVersionUID (1)
- spring注解用法总结 (1)
- eclipse导入maven项目找不到资源文件方法 (1)
- dubbo (0)
- socket 网络编程 服务器与客户端 编程 (1)
- Thread与Runnable实现线程利用线程插队实现求和操作 (1)
- 生产者与消费者模式 (1)
- JAXB注解 java 关于xml的注解,自动生成xml文件 - @XML*** (1)
- xml 与JAVAbean转换 (1)
- MAP (2)
- decimalToString (1)
- 反编译插件 (0)
- 反编译插件 https://sourceforge.net/projects/jadclipse/?source=typ_redirect (1)
- AWX (1)
- 官网地址Dinp (1)
- public interface ExecutorService extends Executor (1)
- MAIN (1)
- 转自于 http://blog.csdn.net/lufeng20/article/details/24314381 (1)
- JaxbUtil (1)
- HttpXmlClient (0)
- Http post 请求 (1)
- URLDecoder (1)
- spdb (0)
- 订单号生成规则 (1)
- 距离0点毫秒数 (1)
- MyBatis存储过程调用java (1)
- Banks (1)
- 学习网址 (1)
- hots配置oracle数据库配置修改 (1)
- 支付宝文档 (1)
- Jadclipse (1)
- filter (0)
- Filter过滤器 (1)
- 工具类 fixbox (1)
- java quartz (0)
- java quartz 实现定时任务,每个礼拜一到礼拜五定时执行 (1)
- Thread (4)
- getResourceAsStream (1)
- BigData (1)
- 开源架构 (17)
- 架构 (0)
- 文件操作 (2)
- tools (20)
- 测试工具 (1)
- vm (1)
- mq (1)
- blog (1)
- 开源架构搭建技术 (6)
- JAVA细节技术点总结 (1)
- 优化技术 (1)
- LINUX命令使用 (1)
- spring (2)
- 大数据 (1)
- struts2 (1)
- python (1)
- pay (1)
- linux (1)
- 压力测试 (1)
- 代码检查插件 (1)
- 游戏端开发 (1)
- 微信开发相关 (1)
- 搜索引擎 (1)
- 网络技术 (1)
- 分布式部署 (1)
- 堆栈信息 (1)
最新评论
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);
}
}
你非要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);
}
}
相关推荐
2. **订单号生成**:`Getnum()`和`Getnum1()`方法分别实现了包含不同随机数长度的订单号生成逻辑。 ```java String t = getStringDate(); int x = (int) (Math.random() * 90) + 10; String serial = t + x; ...
根据提供的标题、描述、标签以及部分内容...通过这两种不同的方法,我们可以生成多种格式的订单号,满足业务需求的同时确保数据的唯一性和准确性。此外,使用枚举类型、存储过程等方式可以提高代码的可维护性和扩展性。
银联订单号生成算法是为了确保在高并发环境下生成的订单号具有唯一性,同时考虑到16位数字的限制。在设计此类算法时,主要需要解决以下几个问题:避免数据库同步问题、时间精度与位数限制、数据库自增字段的并发压力...
在C#编程中,生成唯一不重复的订单号是一个常见的需求,特别是在电商系统中,确保每个订单具有唯一...同时,也可以结合数据库的自增字段或分布式ID生成服务(如Snowflake算法)来实现更高效、更安全的订单号生成机制。
### 模拟订单号生成(Java)实验报告 #### 一、实验背景 随着电子商务行业的快速发展,订单系统作为电商平台的核心组成部分之一,其稳定性和高效性至关重要。订单号作为标识每笔交易唯一性的关键字段,在系统设计...
在当前互联网环境下,为了确保每一笔交易都有一个唯一的标识,生成流水号或订单号是必不可少的环节。流水号与订单号的区别主要在于用途不同,流水号一般用于系统内部管理,而订单号是面向客户的,便于用户查询和确认...
总结来说,"快递运单号生成器1.0.永久免费.zip"是一款实用的工具,它简化了快递运单号的生成过程,提升了物流管理的效率,同时也为企业节省了成本。对于那些处理大量订单的电商从业者来说,这无疑是一个值得尝试的...
这需要开发相应的函数或方法来确保每次生成的编号都是唯一的。 8. **数据库管理**:生成的订单编号会被存储在数据库中,作为订单记录的关键字段。这需要数据库设计合理,确保编号字段的数据类型能容纳所有可能的...
在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...
总结一下,这段代码的核心在于使用SQL函数生成不重复的订单号,通过锁定相关表来确保并发安全,同时通过日期和递增数字来保证唯一性。这种方法适用于单个数据库环境,但若涉及分布式系统或高并发场景,可能需要更...
- **分布式系统中的唯一ID生成**:如电商平台的商品编号、订单号等。 - **日志追踪**:为每次请求生成唯一的标识符,方便追踪和调试。 - **数据持久化**:在数据库中作为主键使用,确保每一行记录都有唯一的标识。 ...
这个过程通常用于获取当前业务单据的最大序列号,以确保新生成的单据内码是唯一的。例如,如果我们要为POrequest类型的单据生成内码,可以这样操作: ```sql declare @p2 int exec GetICMaxNum 'POrequest',@p2 ...
总结来说,随机码生成器是一个强大的工具,能够为IT专业人士提供各种类型和长度的随机字符串。理解和掌握其工作原理与应用场景,对于提高系统安全性和效率有着重要的意义。在实际操作中,选择合适的生成器并正确使用...
这种单据编号的自动生成机制适用于各种需要按顺序生成唯一编号的场景,如订单编号、发票编号等。通过这种方式可以确保编号的唯一性和连续性,同时减少手动输入的错误。 #### 总结 通过上述分析,我们可以看出,...
3. **性能考量**: 当大量并发访问时,需要考虑流水号生成的唯一性和效率问题。 4. **可扩展性**: 如果未来需要支持更多的流水号前缀或者不同的日期格式,可以适当调整函数内部逻辑。 #### 七、总结 该SQL函数提供了...
在IT行业中,生成随机数是一项常见的任务,尤其在软件...这个系统不仅可以用于生成用户编号,还可以扩展到其他需要唯一标识的场景,如订单号、验证码等。在实际开发中,这样的设计有助于提高系统的灵活性和可维护性。
系统会记录订单的详细信息,如商品ID、数量、总价等,并生成唯一的订单号。同时,系统提供了订单状态的跟踪,如待支付、已支付、已发货、已完成等。 3. 用户管理:支持用户注册、登录、密码修改等功能。每个用户有...
- 使用`time()`获取当前时间戳,然后通过`substr()`截取去掉第一位,与`mt_rand(10000, 99999)`生成的随机数结合,创建一个唯一的订单号。这确保了每个订单都有一个独一无二的标识符。 2. **组合签名参数**: - ...
- **订单号生成**:在线商城等系统中,可以使用时间戳作为订单号的一部分,确保订单号的唯一性。 - **文件名生成**:在批量处理文件时,可以用时间戳作为文件名的一部分,避免文件名重复。 #### 5. 进一步优化 - **...