精华内容
下载资源
问答
  • 为什么UUID唯一

    千次阅读 2018-08-07 12:59:37
    UUID是一种通用唯一识别码,而且本机生成耗费资源,目的是用于分布式环境中唯一生成标志码,是由32个16进制数组成, 主要包括三部分: (1)当前日期和时间,UUID的第一个部分是当前日期和时间,如果你在生成一个...

    UUID是一种通用唯一识别码,而且本机生成不耗费资源,目的是用于分布式环境中唯一生成标志码,是由32个16进制数组成,

    主要包括三部分:

    (1)当前日期和时间,UUID的第一个部分是当前日期和时间,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。

    (2)时钟序列

    (3)全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得)

    例如:

    550e8400-e29b-41d4-a716-446655440000

    展开全文
  • 网友指点了一下可以简单的使用 uuid 来做,但是 uuid 产生的是一个重复的字符串。用来当做订单编号,显然太合适。但是我们可以换个底版,来让它变成一组数字。 原理其实很简单,就是借助 java 中 String 类的...

    做生成订单编号的功能。

    网友指点了一下可以简单的使用 uuid 来做,但是 uuid 产生的是一个不重复的字符串。用来当做订单编号,显然不太合适。但是我们可以换个底版,来让它变成一组数字。

     

    原理其实很简单,就是借助 java 中 String 类的 hashcode() 方法即可。整个代码实现如下所示:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    public static String createOrderId() {  

        int machineId = 1;//最大支持1-9个集群机器部署  

        int hashCodeV = UUID.randomUUID().toString().hashCode();  

        if(hashCodeV < 0) {//有可能是负数  

            hashCodeV = - hashCodeV;  

        }  

        // 0 代表前面补充0       

        // 4 代表长度为4       

        // d 代表参数为正数型  

        return machineId+String.format("%015d", hashCodeV);  

    }

    通过对多线程的测试,结果是并发在2000左右都没有问题,可以放心的使用。

    拓展:

    UUID生成的字符序列是没有顺序的,这时候推荐大家使用Twitter的雪花算法,这个算法可以做的比UUID更好。根据需求来选择吧,具体的内容在这里就不列举了,上手很快的,大家自行谷歌吧。

    展开全文
  • 主要介绍了浅谈JAVA如何生成UUID唯一标识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 在C#中很容易生成一组唯一码,最常用的是结构体GUID的NewGuid()实例。如果C#运行Guid.NewGuid();将会得到据说世界唯一的...最近看了一下Python的相关模块,也发现了一个模块uuid。下面来看看详细的介绍与使用示例吧。
  • UUID是如何保证唯一性的

    千次阅读 2020-01-08 23:13:40
    UUID唯一是根据硬件特征,那么,如果在虚拟机里呢?生成两个完全相同的虚拟机,然后让他们在同一时间生成UUID。。。会得到相同的UUID吗? UUID涵义 经由一定的算法机器生成 为了保证UUID唯一性,规范定义了包括...


    UUID的唯一是根据硬件特征,那么,如果在虚拟机里呢?生成两个完全相同的虚拟机,然后让他们在同一时间生成UUID。。。会得到相同的UUID吗?

    UUID涵义

    • 经由一定的算法机器生成
      为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成。
    • 非人工指定,非人工识别
      在特定的范围内重复的可能性极小
    • 在特定的范围内重复的可能性极小
      UUID的生成规范定义的算法主要目的就是要保证其唯一性。但这个唯一性是有限的,只在特定的范围内才能得到保证,这和UUID的类型有关(参见UUID的版本)。

    UUID的版本

    UUID具有多个版本,每个版本的算法不同,应用范围也不同。
    首先是一个特例--Nil UUID--通常我们不会用到它,它是由全为0的数字组成,如下:
    00000000-0000-0000-0000-000000000000

    • UUID Version 1:基于时间的UUID

    基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)。

    • UUID Version 2:DCE安全的UUID

    DCE(Distributed Computing
    Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

    • UUID Version 3:基于名字的UUID(MD5)

    基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

    • UUID Version 4:随机UUID

    根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。

    • UUID Version 5:基于名字的UUID(SHA1)

    和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

    UUID的应用

    从UUID的不同版本可以看出,
    Version 1/2适合应用于分布式计算环境下,具有高度的唯一性;
    Version 3/5适合于一定范围内名字唯一,且需要或可能会重复生成UUID的环境下;
    Version4是用的最广泛也是最简单方便的

    通常我们建议使用UUID来标识对象或持久化数据,但以下情况最好不使用UUID:

    • 映射类型的对象。比如只有代码及名称的代码表。
    • 人工维护的非系统生成对象。比如系统中的部分基础数据。
    • 对于具有名称不可重复的自然特性的对象,最好使用Version 3/5的UUID。比如系统中的用户。如果用户的UUID是Version1的,如果你不小心删除了再重建用户,你会发现人还是那个人,用户已经不是那个用户了。(虽然标记为删除状态也是一种解决方案,但会带来实现上的复杂性。)
    展开全文
  • 主要介绍了Jmeter生成UUID作为唯一标识符过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Python使用uuid模块生成唯一标识ID,需要的朋友可以参考下
  • iOS获取UUID(唯一不变哦)

    万次阅读 2018-06-04 16:53:44
    获取UUID的方法有很多,但是都会因为各种原因改变/** 卸载应用重新安装后会一致*/ + (NSString *)getUUID{ CFUUIDRef uuid = CFUUIDCreate(NULL); NSString *UUID = (__bridge_transfer NSString *)...

    获取UUID的方法有很多,但是都会因为各种原因改变

    /**  卸载应用重新安装后会不一致*/
    + (NSString *)getUUID{
        CFUUIDRef uuid = CFUUIDCreate(NULL);
        NSString *UUID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
        CFRelease(uuid);
        return UUID;
    }
    
    /**  卸载应用重新安装后会不一致*/
    + (NSString *)getUUID{
        return [UIDevice currentDevice].identifierForVendor.UUIDString;;
    }
    
    /** 不会因为应用卸载改变 
      * 但是用户在设置-隐私-广告里面限制广告跟踪后会变成@"00000000-0000-0000-0000-000000000000"
      * 重新打开后会变成另一个,还原广告标识符也会变
      */
    + (NSString *)getUUID{
        return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    }
    

    作为设备唯一的标识符,一言不合就变了肯定是不行的呀

    在产品汪的逼迫下,在我不懈的努力下,我终于找到一个可以一直保持一致的方法。第一次获取成功后保存到钥匙串,然后每次使用都通过钥匙串去拿。

    第一步,打开应用的钥匙串权限

    Target - Capabilities - KeychainSharing - ON

    第二步,复制粘贴代码,懒得复制的可以去我的Github上直接下载

    先粘.h文件

    #import <Foundation/Foundation.h>
    
    @interface KeyChainStore : NSObject
    + (void)save:(NSString*)service data:(id)data;
    + (id)load:(NSString*)service;
    + (void)deleteKeyData:(NSString*)service;
    @end
    

    再粘.m文件

    #import "KeyChainStore.h"
    
    @implementation KeyChainStore
    
    + (NSMutableDictionary*)getKeychainQuery:(NSString*)service {
        return[NSMutableDictionary dictionaryWithObjectsAndKeys:
               (id)kSecClassGenericPassword,(id)kSecClass,
               service,(id)kSecAttrService,
               service,(id)kSecAttrAccount,
               (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,
               nil];
    }
    
    + (void)save:(NSString*)service data:(id)data{
        //Get search dictionary
        NSMutableDictionary*keychainQuery = [self getKeychainQuery:service];
        //Delete old item before add new item
        SecItemDelete((CFDictionaryRef)keychainQuery);
        //Add new object to searchdictionary(Attention:the data format)
        [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data]forKey:(id)kSecValueData];
        //Add item to keychain with the searchdictionary
        SecItemAdd((CFDictionaryRef)keychainQuery,NULL);
    }
    
    + (id)load:(NSString*)service {
        id ret =nil;
        NSMutableDictionary*keychainQuery = [self getKeychainQuery:service];
        //Configure the search setting
        //Since in our simple case we areexpecting only a single attribute to be returned (the password) wecan set the attribute kSecReturnData to kCFBooleanTrue
        [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
        [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];
        CFDataRef keyData =NULL;
        if(SecItemCopyMatching((CFDictionaryRef)keychainQuery,(CFTypeRef*)&keyData) ==noErr){
            @try{
                ret =[NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData*)keyData];
            }@catch(NSException *e) {
                NSLog(@"Unarchiveof %@ failed: %@",service, e);
            }@finally{
            }
        }
        if(keyData)
            CFRelease(keyData);
        return ret;
    }
    
    + (void)deleteKeyData:(NSString*)service {
        NSMutableDictionary*keychainQuery = [self getKeychainQuery:service];
        SecItemDelete((CFDictionaryRef)keychainQuery);
    }
    
    @end

    第三步,使用(直接调这个方法就可以了)

    /**  获取UUID*/
    + (NSString *)getUUIDByKeyChain{
        // 这个key的前缀最好是你的BundleID
        NSString*strUUID = (NSString*)[KeyChainStore load:@"com.mycompany.myapp.usernamepassword"];
        //首次执行该方法时,uuid为空
        if([strUUID isEqualToString:@""]|| !strUUID)
        {
            // 获取UUID 这个是要引入<AdSupport/AdSupport.h>的
            strUUID = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
            
            if(strUUID.length ==0 || [strUUID isEqualToString:@"00000000-0000-0000-0000-000000000000"])
            {
                //生成一个uuid的方法
                CFUUIDRef uuidRef= CFUUIDCreate(kCFAllocatorDefault);
                strUUID = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault,uuidRef));
                CFRelease(uuidRef);
            }
            
            //将该uuid保存到keychain
            [KeyChainStore save:@"com.mycompany.myapp.usernamepassword" data:strUUID];
        }
        return strUUID;
    }

    无论你怎么折腾都会保证同一设备每次获取到的UUID都是一致的,卸载应用,开启广告限制跟踪,系统升级都不会有影响。越狱刷机这种骚操作我没有测过,即使有问题,感觉这些调皮的用户也可以忽略了,因为这个已经是目前最好的解决办法了,如果大家有什么更好的解决方案,还请评论区指正。

    参考资料:https://blog.csdn.net/wsdxsYB/article/details/51773494

    展开全文
  • go语言结合redis实现 “获取唯一id”
  • Android生成唯一标识符UUID(完全替代IMEI),项目真实有效。
  • iOS获取唯一标识uuid

    2019-01-15 15:45:19
    iOS获取唯一标识,在刷机的前提下,无论多次获取,还是卸载后重装程序,获取的 uuid 都不会发生改变
  •  UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 ...
  • C++代码,VS工程,在windows x86...通过获取PC的CPU id字符串,以这个字符串作为种子,生成唯一性的UUID。这个UUID可以用作PC的唯一性标识,或者身份认证的标识。UUID不同CPU不会重复,但相同CPU下每次的UUID值都一样。
  • 生成用于分布式应用程序的通用唯一标识符(UUID)。 基于 。 生成的UUID 调用#generate生成一个新的UUID。 该方法以三种格式之一返回字符串。 默认格式为36个字符长,包含32个十六进制八位字节和连字符,分隔各个...
  • 本文给大家汇总介绍了5种使用javascript实现全局唯一标识符(GUID,UUID)的方法,非常的全面,有需要的小伙伴可以来参考下
  • GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年重复
  • mysql批量插入重复uuid数据(insert select 语法) 问题描述: 1. 通过select replace(uuid(), '-', '') , 生成的uuid全部重复。(可能是navicat执行顺序的问题) 2.select uuid() ,生成的uuid不重复。但是有...
  • UUID全局唯一标识符

    2015-12-10 10:26:10
    UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码...
  • 稳定获取Android设备唯一码(UUID)的解决方案
  • NULL 博文链接:https://jarorwar.iteye.com/blog/553875
  • nodejs 提供了一个 node-uuid 模块用于生成 uuid唯一标识符) 首先执行 : npm install node-uuid es6引入 import uuid from 'node-uuid'; console.log(uuid.v1()); console.log(uuid.v4()); ...
  • ios确保UUID唯一

    2017-02-21 13:11:19
    ios在需要用到上报客户端的时候需要确保UUID的一致性,几句代码就能搞定! 自己使用的时候需注意: 在Build Phases里面将 KeychainItemWrapper.m添加支持非arc模式:需要输入 -fno-objc-arc
  • uuid唯一

    2019-04-19 16:36:00
    唯一的。我在几台硬件完全相同(同一批购买的)、软件也完全相同(用同一个GHOST系统安装)的电脑上试过:不同的电脑上,wmiccsproductgetuuid获取的UUID码是不同的。另外,因为这些电脑上,安装了两个操作系统...
  • ​ 使用UUID生成 唯一重复 的字符串。 import java.util.UUID; public class UUIDUtils { public static String getUUID(){ return UUID.randomUUID().toString().replace("-",""); } } 什么是UUID: ​ ...
  • UUID(通用唯一标识符)

    万次阅读 2016-06-19 08:44:55
    通用唯一识别码(Universally Unique Identifier,简称UUID) 一、UUID 的目的 是让分布式系统中的所有元素,都能有唯一的辨识资讯,而需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立与...
  • 3)执行以下sql语句批量生成uuid UPDATE 表名 SET ID = REPLACE(UUID(), '-', ''); mysql生成一个UUID方法(带横杠 -) SELECT UUID(); 替换UUID中的 ‘-’ SELECT REPLACE(UUID(), '-', ''); ...
  • 通用唯一标识符(UUID)是128位无符号整数,通常表示为十六进制字符串,分为五个带破折号的组。 RFC 4122定义了最广泛使用的UUID类型。复制UUID的可能性接近于零,因此它们是在分布式系统中生成唯一标识符的理想...
  • rem bat中没有获取uuid的方法,通过固定字符串+自增数字实现 set /p w=请输入文件格式(即扩展名并以回车结束): set fileStartStr=军旗_1_5a6dcac9-e508-48c2-89a7-791890d setlocal EnableDelayedExpansion rem 自增...
  • UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,239
精华内容 33,295
关键字:

uuid不唯一