`

利用锁机制生成唯一序列号

 
阅读更多
package com.ezubo.global.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 利用锁机制 不适用于分布式场景
 * Created by  on 2015-12-29.
 */
public class Generator3 {
    private static Lock lock = new ReentrantLock();
    private static final String DATE_FORMAT = "yyyyMMddHHmmss";
    private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(DATE_FORMAT);
    private static String forwardTime = "";
    private static Long no = 1L;

    private Generator3(){
        super();
    }

    /**
     * 生成序列号
     * @param prefix
     * @return
     */
    public static String getSeqNo(String prefix){
        lock.lock();
        try{
            String pfix = prefix == null ? "" : prefix;
            String currentTime = SIMPLE_DATE_FORMAT.format(new Date());
            if(!currentTime.equals(forwardTime)){
                no = 1L;
            }
            String serializeNo = FormatUtil.leftpad(no++ , "00000000");
            forwardTime = currentTime;
            return pfix + currentTime + serializeNo;
        }finally {
            lock.unlock();
        }
    }
}

 

分享到:
评论

相关推荐

    C#自动生成序列号 源码

    虽然上述方法可以生成唯一序列号,但在实际应用中,可能需要考虑更多的安全因素,如防止序列号的破解或伪造。可以采用加密算法对生成的序列号进行编码,或者添加额外的验证机制,比如在序列号中包含服务器生成的私有...

    软件序列号生成小算法

    这里我们将深入探讨如何通过VC(Visual C++)实现一个基于硬盘序列号生成唯一对应序列号的算法。 首先,我们需要了解VC++。VC++是微软开发的一款强大的C++集成开发环境,支持Windows平台上的应用程序开发。利用VC++...

    一个不错的VB序列号自动生成器

    这个“一个不错的VB序列号自动生成器”是一个利用VB编写的程序,其主要功能是生成软件的序列号。序列号通常用于软件授权验证,确保用户在安装或使用软件时是合法的。 序列号自动生成器的工作原理通常是通过一套算法...

    序列号生成器初级代码

    在本项目中,MD5被用来生成硬件信息的指纹,因为硬件配置的细微差异会导致不同的MD5值,从而生成唯一的序列号。这种方式既简单又高效,但需要注意的是,MD5的安全性在近年来已经被削弱,存在碰撞攻击的可能性,即...

    根据mac地址生成服务器唯一机器码

    3. **生成机器码**:处理后的MAC地址可以作为基础数据,结合其他信息,如CPU序列号、硬盘序列号等,通过特定算法(例如加盐哈希、AES加密等)生成一个服务器唯一机器码。这个机器码应该是不可逆的,即使有人知道生成...

    VB 根据用户名和产品编号生成序列号

    6. **序列号验证**:生成序列号后,还需要提供一个验证机制来确认序列号的有效性。这可能涉及解密序列号、比较内部数据或者通过网络向服务器发送序列号进行验证。 7. **用户体验**:最后,生成的序列号应以用户友好...

    一个软件序列号生成的例子

    本示例是基于VB.NET平台,利用硬盘序列号生成唯一的序列号,这涉及到软件授权、加密算法以及硬件识别等多个技术领域。 首先,了解VB.NET。VB.NET是微软开发的一种面向对象的编程语言,它是Visual Basic的现代版本,...

    利用雪花算法生成uuid

    UUID,全称Universally Unique Identifier,即全局唯一标识符,是一种在分布式系统中用来生成唯一标识的机制。在大数据和云计算环境中,为了确保每个数据实体的唯一性,UUID扮演着至关重要的角色。雪花算法...

    获取硬盘序列号vb.net

    硬盘序列号是硬盘制造商赋予每个硬盘的唯一标识符,通常由一组特定的字母和数字组成,用于区分不同的硬盘。本篇文章将深入探讨如何在VB.NET中实现这一功能。 首先,我们需要了解在Windows操作系统中,硬盘序列号...

    Delphi利用网卡序列号设计软件注册

    首先,理解网卡序列号:每个网络适配器(即网卡)都有一个全球唯一的物理地址,即MAC地址,通常由6个16进制数字组成,用于在网络中唯一标识设备。这个特性使得MAC地址成为一种可能的软件注册凭证。 1. 获取网卡...

    如何用硬盘的硬盘物理序列号(唯一)进行加密

    本文将深入探讨如何利用硬盘的物理序列号(PSN,Physical Serial Number)这一唯一的标识符来进行加密操作,确保数据的安全性和隐私性。 首先,理解硬盘物理序列号(PSN)的概念。每个硬盘在生产时都会被赋予一个...

    C#根据cpu序列号、磁盘序列号设计软件注册程序

    首先,CPU序列号和磁盘(硬盘)序列号是计算机硬件的唯一标识符。CPU序列号由制造商在生产过程中赋予,每个CPU都独一无二。磁盘序列号同样如此,它是硬盘出厂时由制造商设置的唯一标识。这两个信息在一般情况下不会...

    seqsvr:序列号生成器-《万亿级调用系统:微信序列号生成器架构设计及升级》

    1. **分布式锁**:为了保证序列号的全局唯一性,seqsvr可能采用了分布式锁机制,如Zookeeper或Redis的分布式锁,确保在多节点并行生成时不会产生重复序列号。 2. **原子操作**:在C++中,可以利用原子操作(std::...

    获取BIOS和磁盘序列号信息

    在软件加密中,BIOS和磁盘序列号常被用于生成机器码,这是一种基于特定硬件环境的唯一标识。通过结合这两个信息,开发者可以创建更加复杂的授权机制,比如硬件绑定授权。这种授权方式要求软件只能在特定硬件上运行,...

    读取U盘序列号MD5加密模板

    3. 结合序列号生成密钥:将U盘序列号作为输入,经过MD5算法生成唯一的密钥。 4. 文件权限管理:为每个文件或文件夹设置访问规则,只有提供正确密钥的用户才能访问。 5. 安全存储密钥:密钥需要安全地存储,以防止被...

    简析Oracle中锁、序列、索引

    Oracle数据库中锁、序列、索引管理机制 ...锁机制可以解决多用户并发访问数据库的问题,序列机制可以生成唯一的整数,索引机制可以提高查询速度。只有正确地使用这些机制,才能确保数据库的安全性和高效性。

    解密 基于硬盘序列号的加密与解密

    由于其唯一性,硬盘序列号常被用作安全机制的一部分,例如在软件激活、设备绑定或特定服务认证中。 基于硬盘序列号的加密方法通常包括以下几个步骤: 1. **获取硬盘序列号**:通过系统API或第三方工具读取硬盘的...

    获取硬盘序列号DLL

    硬盘序列号是硬盘的唯一标识符,对于设备追踪、数据安全和系统管理等方面具有重要意义。 首先,我们需要了解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种可共享的代码...

    C# 获取并生成机器码

    在给定的标题和描述中,我们关注的是如何在C#中获取这些硬件信息,并利用它们生成机器码。 首先,我们需要了解如何获取硬盘序列号。在Windows系统中,硬盘序列号是一个标识硬盘的唯一数字或字母组合。在C#中,可以...

    订单号生成工具类

    2. **防止重复**:为了防止订单号重复,可以采用原子操作(如数据库的自增字段)来生成订单号的一部分,或者利用分布式锁确保同一时刻只有一个进程在生成订单号。此外,还可以通过哈希函数对生成的订单号进行校验,...

Global site tag (gtag.js) - Google Analytics