import java.sql.Connection; import org.apache.log4j.Logger; /** * @author rq * */ public class CardIdManager { public static Logger logger = Logger.getLogger(CardIdManager.class); private static CardIdManager cardNum; private Object obj = new Object(); public static CardIdManager getInstance() { if (cardNum == null) { cardNum = new CardIdManager(); } return cardNum; } /** * 同步的方法块获取唯一的商城卡号 * * @param key * @return * @throws Exception */ public long getNextCardNum(String key, Connection con) throws Exception { synchronized (obj) { long result = 0; int num = 0; if (key.length() == 1 && "2".equalsIgnoreCase(key)) { num = 10; } else if (key.length() == 7) { num = 4; } else if (key.length() == 11) { num = 4; key = key.substring(0, 7); } else { logger.error("aa"); throw new Exception("ss"); } long randomNumber = 0; int i = 0; String keyNum; do { i++; randomNumber = Random.getRandomNumber(num); keyNum = key + String.valueOf(randomNumber); logger.warn(i+ "aa" + keyNum); } while (checkNum(keyNum, con)); result = Long.parseLong(key + String.valueOf(randomNumber)); return result; } } /** * 通过查询数据库验证商城卡号是否存在 存在则返回true 反之返回false * * @param cardNum * @return */ private boolean checkNum(String cardNum, Connection con) throws Exception { boolean result = false; // CardMasterDao dao = new CardMasterDao(con); // List<CardMaster> cardList = dao // .findCardMaster("C_ID='" + cardNum + "'"); // if (cardList != null && cardList.size() > 0) { // logger.error(BusinessConfigParameters.W_ACTIVATE_CARD_002); // result = true; // } return result; } public static void main(String[] s) throws Exception { for (int i = 0; i < 10; i++) { System.out.println(CardIdManager.getInstance().getNextCardNum( "15868846882", null)); // System.out.println("======================"); System.out.println(CardIdManager.getInstance().getNextCardNum("2", null)); System.out.println("*******************************"); } } }
import java.util.Date; /** * 随机数生成器 * * @author rq * */ public class Random { private static final String[] aStrRandom = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; /** * 获取num位随机数 * * @param num * @return */ public static long getRandomNumber(int num) { long result = 0; StringBuffer sb = new StringBuffer(); for (int i = 0; i < num; i++) { sb.append((int) (9 * Math.random() + 1)); } result = Long.parseLong(sb.toString()); return result; } public static String getRandomNumberStr(int num, boolean is, int nu) { String result = ""; StringBuffer sb = new StringBuffer(); int base = nu; for (int i = 0; i < num; i++) { if (is && nu == i) { sb.append(" "); nu = nu + base; } sb.append((int) (9 * Math.random() + 1)); } result = sb.toString(); return result; } /** * 获取随机数 * * @param base * @return */ public static int getRandom(int base) { return (int) (base * Math.random() + 1); } /** * 获取num位随机字符 * * @param num * @return */ public static String getRandomString(int num) { String result = ""; for (int i = 0; i < num; i++) { result += aStrRandom[getRandom(aStrRandom.length - 1)]; } return result; } public static void main(String[] q) throws Exception { // Date sDate = new Date(); // String filePath = "D://test//" + new Date().getTime(); // WorkBookManager work = WorkBookManager.getInstance(filePath); // work.initWorkBook(); // work.setMaxRow(1000); // work.setMaxSheetPage(2); // for (int i = 0; i < 1000; i++) { // String cardNum = Random.get3NumStr(String.valueOf(i + 1), 6); // String cardPwd = Random.getRandomNumberStr(17, true, 4); // work.put("1004 " + "001 " + "002 " + cardNum, cardPwd); // } // work.saveFile(); // // ZipUtils.put(filePath, filePath + ".zip"); // Date eDate = new Date(); // System.out // .println("共耗时=>" + (eDate.getTime() - sDate.getTime()) + "毫秒"); System.out.println(getSperator("123456dfvdfvdsavasdfasdf789", 4)); } /** * 获取线程睡眠时间 * * @param num * @return */ public static int getSleepNumber(int num) { return (int) (num * Math.random() + 1); } /** * @param s * @return */ public static String get3NumStr(String s, int num) { int temp = num - s.length(); for (int i = 0; i < temp; i++) { s = "0" + s; } return s; } public static String getSperator(String s, int num) { StringBuffer result = new StringBuffer(); int base = num; for (int i = 0; i < s.length(); i++) { if (i == base) { base += num; result.append(" "); } result.append(s.substring(i, i + 1)); } return result.toString(); } }
相关推荐
代码生成器会根据数据库表的结构,自动创建Model类,包括字段、注解(如`@TableId`, `@Column`, `@TableField`等),以及getter和setter方法。 2. **Mapper XML文件**:MyBatis框架中的Mapper XML文件是用来定义SQL...
在这个名为"Distributed-Kit"的压缩包中,我们找到了三个关键组件:分布式锁、ID生成器和限流工具。下面将详细解释这三个组件及其在分布式环境中的应用。 **分布式锁** 分布式锁是一种在分布式系统中实现同步控制的...
分布式ID生成器是大型互联网系统中不可或缺的一部分,其主要任务是为系统中的各种实体生成全局唯一的标识符(ID)。在复杂分布式环境下,选择合适的ID生成策略对于系统的性能、可用性和可扩展性至关重要。以下是几种...
实体类生成器是一种工具,主要用于自动化C#编程中的一个常见任务——创建数据模型类,这些类通常用于映射数据库表或API响应等数据结构。在软件开发中,手动编写每一个实体类可以是耗时且易出错的,尤其是在处理大量...
唯一ID生成器唯一的ID生成器,在分布式上下文中生成唯一的1个八个字节的标识符。 在所选计算环境的范围内是唯一的。这是为了什么? 当您要为分布式计算环境中的对象(例如,数据库记录)分配唯一的标识符,这些...
2. 实体结构自动生成:用户输入表名,生成器会根据表的字段信息自动创建对应的Java实体类,包括属性定义、getter和setter方法,以及注解(如@Table, @Id, @Column等),方便ORM框架(如MyBatis)的使用。 3. 数据库...
在分布式环境中,为了确保每个实体的标识都是唯一的,全局唯一ID生成器扮演着至关重要的角色。Vesta的设计目标是高效、可扩展且无冲突,使得在大规模并发场景下也能稳定工作。 Vesta的工作原理基于Snowflake算法的...
礼光KSC文件生成器是一款专门针对KTV点歌系统的工具软件,它的主要功能是自动生成KSC格式的文件。KSC文件是卡拉OK歌曲控制文件的缩写,这种文件在KTV点歌系统中起着至关重要的作用,它包含了歌曲的相关信息以及播放...
4. **易于维护**:当数据库结构发生变化时,可以通过更新代码生成器来快速同步实体和映射。 然而,尽管代码生成器可以减轻工作负担,但开发者仍然需要理解Nhibernate的基本概念和配置,以便正确地调整生成的代码以...
代码生成器,通常被称作Code Generator,是软件开发中的一个重要工具,它的主要功能是自动生成源代码,帮助开发者快速构建应用的基础结构,减少手动编写重复性代码的时间,提高开发效率。在Java领域,MyBatis ...
`TableIdentityGenerator`可能就是这样的实现,它可能是基于Java的ID生成器,通过查询和更新数据库表来获取下一个自增ID。 3. **分布式锁**:在多线程或多服务环境下,为了防止多个实例同时生成相同的ID,可能采用...
`donkeyid`扩展的核心功能在于它提供了一种高性能的ID生成机制。在传统的MySQL自增ID方案中,当达到最大值时,ID会回绕,这在分布式系统中可能导致冲突。而`donkeyid`通过算法优化,避免了这个问题,它可以在多台...
《Jedis使用总结:Pipeline、分布式ID生成器与分布式锁》 Jedis是Redis的Java客户端,它提供了丰富的API来与Redis服务器进行交互。本文将深入探讨Jedis在Pipeline、分布式ID生成器以及分布式锁(包括watch和multi...
"Generator代码生成器"是一种工具,它能够自动化地创建编程中的常见代码模板,极大地提高了开发效率。在IT行业中,特别是Java开发领域,这类工具被广泛使用,用于自动生成如DAO层、Service层、Controller层等代码,...
徐海峰在其讲解中展示了Id生成器在实际应用中需要考虑的需求和挑战,并提出了多种策略和架构设计,以应对分布式系统环境下对Id生成器的高要求。通过这些方法的合理运用,可以极大地提升分布式数据库的性能和可靠性,...
【狼奔代码生成器使用手册】是一份详细指导程序员如何高效利用狼奔代码生成器进行ASP.NET项目开发的文档。该工具基于.NET 4.0技术平台,旨在整合开发经验和知识,自动化生成ASP.NET页面及后台代码,减轻程序员的重复...
《代码生成器知识详解》 代码生成器是程序员的得力助手,它能极大地提高软件项目的开发效率,通过自动生成ASP.NET页面及后台代码,基于面向服务的架构(SOA),使得开发工作更加智能化。本篇文章将深入探讨代码生成...
例如,如果有一个名为"Employee"的表,生成器会创建一个"Employee"类,包含"ID"、"Name"、"Department"等属性,并提供"Save"、"GetById"、"Update"、"Delete"等方法。 存储过程是预编译的SQL语句集合,它们在数据库...
《C#实体生成器》 在C#编程中,实体生成器是一种工具,它能够自动生成表示数据库表的类,这些类通常被称为实体类。实体类是对象关系映射(ORM)框架的一部分,如Entity Framework,它们使得开发人员能够以面向对象...
- ID生成器模块:负责与MySQL交互,获取新的ID。 - 请求处理器模块:接收来自客户端的请求,使用goroutine进行异步处理。 - 锁管理模块:实现分布式锁,防止ID分配冲突。 - 客户端接口:提供给其他系统调用的API接口...