`

同步id生成器

 
阅读更多

 

 

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();
	}

}

 

分享到:
评论

相关推荐

    java代码生成器

    代码生成器会根据数据库表的结构,自动创建Model类,包括字段、注解(如`@TableId`, `@Column`, `@TableField`等),以及getter和setter方法。 2. **Mapper XML文件**:MyBatis框架中的Mapper XML文件是用来定义SQL...

    分布式锁+id生成器+限流工具

    在这个名为"Distributed-Kit"的压缩包中,我们找到了三个关键组件:分布式锁、ID生成器和限流工具。下面将详细解释这三个组件及其在分布式环境中的应用。 **分布式锁** 分布式锁是一种在分布式系统中实现同步控制的...

    分布式ID生成器的解决方案总结.docx

    分布式ID生成器是大型互联网系统中不可或缺的一部分,其主要任务是为系统中的各种实体生成全局唯一的标识符(ID)。在复杂分布式环境下,选择合适的ID生成策略对于系统的性能、可用性和可扩展性至关重要。以下是几种...

    实体类生成器

    实体类生成器是一种工具,主要用于自动化C#编程中的一个常见任务——创建数据模型类,这些类通常用于映射数据库表或API响应等数据结构。在软件开发中,手动编写每一个实体类可以是耗时且易出错的,尤其是在处理大量...

    java-uniqueid:唯一的ID生成器,专门处理小型ID

    唯一ID生成器唯一的ID生成器,在分布式上下文中生成唯一的1个八个字节的标识符。 在所选计算环境的范围内是唯一的。这是为了什么? 当您要为分布式计算环境中的对象(例如,数据库记录)分配唯一的标识符,这些...

    code-generation_java代码生成器_leavingkv6_generation_com.gitc.essc_

    2. 实体结构自动生成:用户输入表名,生成器会根据表的字段信息自动创建对应的Java实体类,包括属性定义、getter和setter方法,以及注解(如@Table, @Id, @Column等),方便ORM框架(如MyBatis)的使用。 3. 数据库...

    全局唯一id生成器vesta.rar

    在分布式环境中,为了确保每个实体的标识都是唯一的,全局唯一ID生成器扮演着至关重要的角色。Vesta的设计目标是高效、可扩展且无冲突,使得在大规模并发场景下也能稳定工作。 Vesta的工作原理基于Snowflake算法的...

    礼光KSC文件生成器

    礼光KSC文件生成器是一款专门针对KTV点歌系统的工具软件,它的主要功能是自动生成KSC格式的文件。KSC文件是卡拉OK歌曲控制文件的缩写,这种文件在KTV点歌系统中起着至关重要的作用,它包含了歌曲的相关信息以及播放...

    Nhibernate代码生成器

    4. **易于维护**:当数据库结构发生变化时,可以通过更新代码生成器来快速同步实体和映射。 然而,尽管代码生成器可以减轻工作负担,但开发者仍然需要理解Nhibernate的基本概念和配置,以便正确地调整生成的代码以...

    代码生成器

    代码生成器,通常被称作Code Generator,是软件开发中的一个重要工具,它的主要功能是自动生成源代码,帮助开发者快速构建应用的基础结构,减少手动编写重复性代码的时间,提高开发效率。在Java领域,MyBatis ...

    应用级自增ID的生成

    `TableIdentityGenerator`可能就是这样的实现,它可能是基于Java的ID生成器,通过查询和更新数据库表来获取下一个自增ID。 3. **分布式锁**:在多线程或多服务环境下,为了防止多个实例同时生成相同的ID,可能采用...

    donkeyid, php扩展,64位自增id生成器.zip

    `donkeyid`扩展的核心功能在于它提供了一种高性能的ID生成机制。在传统的MySQL自增ID方案中,当达到最大值时,ID会回绕,这在分布式系统中可能导致冲突。而`donkeyid`通过算法优化,避免了这个问题,它可以在多台...

    Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】.docx

    《Jedis使用总结:Pipeline、分布式ID生成器与分布式锁》 Jedis是Redis的Java客户端,它提供了丰富的API来与Redis服务器进行交互。本文将深入探讨Jedis在Pipeline、分布式ID生成器以及分布式锁(包括watch和multi...

    generator代码生成器

    "Generator代码生成器"是一种工具,它能够自动化地创建编程中的常见代码模板,极大地提高了开发效率。在IT行业中,特别是Java开发领域,这类工具被广泛使用,用于自动生成如DAO层、Service层、Controller层等代码,...

    分布式数据库基石-id中的学问-徐海峰

    徐海峰在其讲解中展示了Id生成器在实际应用中需要考虑的需求和挑战,并提出了多种策略和架构设计,以应对分布式系统环境下对Id生成器的高要求。通过这些方法的合理运用,可以极大地提升分布式数据库的性能和可靠性,...

    狼奔代码生成器使用手册

    【狼奔代码生成器使用手册】是一份详细指导程序员如何高效利用狼奔代码生成器进行ASP.NET项目开发的文档。该工具基于.NET 4.0技术平台,旨在整合开发经验和知识,自动化生成ASP.NET页面及后台代码,减轻程序员的重复...

    代码生成器知识.pdf

    《代码生成器知识详解》 代码生成器是程序员的得力助手,它能极大地提高软件项目的开发效率,通过自动生成ASP.NET页面及后台代码,基于面向服务的架构(SOA),使得开发工作更加智能化。本篇文章将深入探讨代码生成...

    类与存储过程生成器SQL版

    例如,如果有一个名为"Employee"的表,生成器会创建一个"Employee"类,包含"ID"、"Name"、"Department"等属性,并提供"Save"、"GetById"、"Update"、"Delete"等方法。 存储过程是预编译的SQL语句集合,它们在数据库...

    C#实体生成器.rar

    《C#实体生成器》 在C#编程中,实体生成器是一种工具,它能够自动生成表示数据库表的类,这些类通常被称为实体类。实体类是对象关系映射(ORM)框架的一部分,如Entity Framework,它们使得开发人员能够以面向对象...

    Go-GolangMysql实现的分布式ID生成服务

    - ID生成器模块:负责与MySQL交互,获取新的ID。 - 请求处理器模块:接收来自客户端的请求,使用goroutine进行异步处理。 - 锁管理模块:实现分布式锁,防止ID分配冲突。 - 客户端接口:提供给其他系统调用的API接口...

Global site tag (gtag.js) - Google Analytics