当前位置: 首页 > news >正文

总结企业网站建设的流程汽车之家网站

总结企业网站建设的流程,汽车之家网站,确定网站风格,wordpress点击打印网页UUID/GUID介绍、生成规则及生成代码 1. UUID介绍1.1 介绍1.2 UUID优势1.3 UUID劣势 2. UUID版本2.1 版本1 - 基于时间的UUID2.1.1优点2.1.2 缺点2.1.3 生成规则 2.2 版本2 - 分布式安全的UUID2.2.1 优点2.2.2 缺点2.2.3 生成规则 2.3 版本3 - 基于名字空间的UUID(MD…

UUID/GUID介绍、生成规则及生成代码

  • 1. UUID介绍
    • 1.1 介绍
    • 1.2 UUID优势
    • 1.3 UUID劣势
  • 2. UUID版本
    • 2.1 版本1 - 基于时间的UUID
      • 2.1.1优点
      • 2.1.2 缺点
      • 2.1.3 生成规则
    • 2.2 版本2 - 分布式安全的UUID
      • 2.2.1 优点
      • 2.2.2 缺点
      • 2.2.3 生成规则
    • 2.3 版本3 - 基于名字空间的UUID(MD5版)
      • 2.3.1 优点
      • 2.3.2 缺点
      • 2.3.3 生成规则
    • 2.4 版本4 - 基于随机数的UUID
      • 2.4.1 优点
      • 2.4.2 缺点
      • 2.4.3 生成规则
    • 2.5 版本5 - 基于名字空间的UUID(SHA1版)
      • 2.5.1 优点
      • 2.5.2 缺点
      • 2.5.3 生成规则
  • 3. UUID生成代码
  • 4. GUID介绍
  • 5. GUID 生成规则
  • 6. GUID 生成代码
    • 6.1 C#
    • 6.2 SQL server

1. UUID介绍

1.1 介绍

  • UUID全称为:Universally Unique IDentifier(通用唯一识别码)
  • UUID算法的目的是为了生成某种形式的全局唯一ID来标识系统中的任一元素,尤其在分布式环境下,该ID需要不依赖中心认证即可自动生成全局唯一ID。
  • UUID是由一组32位数的16进制数字所构成,故UUID理论上的总数为1632=2128,约等于3.4 x 1038。也就是说若每纳秒(ns)产生1万亿个UUID,要花100亿年才会将所有UUID用完。
  • UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为 8-4-4-4-12 的32个字符。示例:
    550e8400-e29b-41d4-a716-446655440000
  • RFC 4122 为UUID 定义了统一资源名称(URN)名字空间。作为URN呈现的UUID如下:
    urn:uuid:123e4567-e89b-12d3-a456-426655440000

1.2 UUID优势

  • 无需网络,单机自行生成
  • 速度快,QPS高(支持100ns级并发)
  • 各语言均有相应实现库供直接使用

1.3 UUID劣势

  • String存储,占空间,DB查询及索引效率低
  • 无序,可读性差
  • 根据实现方式不同可能泄露信息

2. UUID版本

  • 版本 1/2 适用于需要高度唯一性且无需重复的场景;
  • 版本 3/5 适用于一定范围内唯一且需要或可能会重复生成UUID的环境下;
  • 版本 4 适用于对唯一性要求不太严格且追求简单的场景。

2.1 版本1 - 基于时间的UUID

2.1.1优点

能基本保证全球唯一性

2.1.2 缺点

使用了Mac地址,因此会暴露Mac地址和生成时间

2.1.3 生成规则

基于时间的UUID为例先梳理UUID的结构:
UUID为32位的十六机制数,因此实际上是16-byte (128-bit),各位分别为:

在这里插入图片描述

时间值:在基于时间的UUID中,时间值是一个60位的整型值,对应UTC的100ns时间间隔计数,因此其支持支持一台机器每秒生成10M次。在UUID中,将这60位放置到了15~08这8-byte中(除了09位有4-bit的版本号内容)。

版本号:版本号即上文所说的五个版本,在五个版本的UUID中,都总是在该位置标识版本,占据 4-bit,分别以下列数字表示:

在这里插入图片描述

因此版本号这一位的取值只会是1,2,3,4,5

变体值:表明所依赖的标准(X表示可以是任意值):
在这里插入图片描述

时钟序列:在基于时间的UUID中,时钟序列占据了07~06位的14-bit。不同于时间值,时钟序列实际上是表示一种逻辑序列,用于标识事件发生的顺序。在此,如果前一时钟序列已知,则可以通过自增来实现时钟序列值的改变;否则,通过(伪)随机数来设置。主要用于避免因时间值向未来设置或节点值改变可能导致的UUID重复问题。

节点值:在基于时间的UUID中,节点值占据了05~00的48-bit,由机器的MAC地址构成。如果机器有多个MAC地址,则随机选其中一个;如果机器没有MAC地址,则采用(伪)随机数。

2.2 版本2 - 分布式安全的UUID

2.2.1 优点

能保证全球唯一性

2.2.2 缺点

很少使用,常用库基本没有实现

2.2.3 生成规则

将基于时间的UUID(版本1)中时间戳前四位换为POSIX的UID或GID,其余保持一致。

2.3 版本3 - 基于名字空间的UUID(MD5版)

2.3.1 优点

不同名字空间或名字下的UUID是唯一的;相同名字空间及名字下得到的UUID保持重复。

2.3.2 缺点

MD5碰撞问题,只用于向后兼容,后续不再使用

2.3.3 生成规则

将命名空间 (如DNS、URL、OID等) 及名字转换为字节序列;
通过MD5散列算法将上述字节序列转换为16字节哈希值 (MD5散列不再推荐,SHA1散列的20位只使用其15~00位);
将哈希值的 3~0 字节置于UUID的15~12位;
将哈希值的 5~4 字节置于UUID的11~10位;
将哈希值的 7~6 字节置于UUID的09~08位,并用相应版本号覆盖第9位的高4位 (同版本1位置);
将哈希值的 8 字节置于UUID的07位,并用相应变体值覆盖其高2位 (同版本1位置);
将哈希值的 9 字节置于UUID的06位 (原时钟序列位置);
将哈希值的 15~10 字节置于UUID的05~00位 (原节点值位置)。

2.4 版本4 - 基于随机数的UUID

2.4.1 优点

实现简单

2.4.2 缺点

重复几率可计算

2.4.3 生成规则

生成16byte随机值填充UUID。重复机率与随机数产生器的质量有关。若要避免重复率提高,必须要使用基于密码学上的假随机数产生器来生成值才行;
将变体值及版本号填到相应位置。

2.5 版本5 - 基于名字空间的UUID(SHA1版)

2.5.1 优点

不同名字空间或名字下的UUID是唯一的;相同名字空间及名字下得到的UUID保持重复。

2.5.2 缺点

SHA1计算相对耗时

2.5.3 生成规则

将命名空间 (如DNS、URL、OID等) 及名字转换为字节序列;
通过SHA1散列算法将上述字节序列转换为16字节哈希值 (MD5散列不再推荐,SHA1散列的20位只使用其15~00位);
将哈希值的 3~0 字节置于UUID的15~12位;
将哈希值的 5~4 字节置于UUID的11~10位;
将哈希值的 7~6 字节置于UUID的09~08位,并用相应版本号覆盖第9位的高4位 (同版本1位置);
将哈希值的 8 字节置于UUID的07位,并用相应变体值覆盖其高2位 (同版本1位置);
将哈希值的 9 字节置于UUID的06位 (原时钟序列位置);
将哈希值的 15~10 字节置于UUID的05~00位 (原节点值位置)。

3. UUID生成代码

go代码如下

package mainimport ("fmt""github.com/google/uuid"
)func UUIDv1() uuid.UUID {id, err := uuid.NewUUID()if err != nil {panic(err)}return id
}func UUIDv2G() uuid.UUID {id, err := uuid.NewDCEGroup()if err != nil {panic(err)}return id
}func UUIDv2P() uuid.UUID {id, err := uuid.NewDCEPerson()if err != nil {panic(err)}return id
}func UUIDv3(data []byte) uuid.UUID {id, err := uuid.NewDCEPerson()if err != nil {panic(err)}return uuid.NewMD5(id, data)
}func UUIDv4() uuid.UUID {return uuid.New()
}func UUIDv5(data []byte) uuid.UUID {id, err := uuid.NewDCEPerson()if err != nil {panic(err)}return uuid.NewSHA1(id, data)
}func main() {fmt.Println("---------------UUIDv1---------------")for i := 0; i < 5; i++ {fmt.Println(UUIDv1())}fmt.Println("---------------UUIDv2G--------------")for i := 0; i < 5; i++ {fmt.Println(UUIDv2G())}fmt.Println("---------------UUIDv2P--------------")for i := 0; i < 5; i++ {fmt.Println(UUIDv2P())}fmt.Println("---------------UUIDv3---------------")for i := 0; i < 5; i++ {fmt.Println(UUIDv3([]byte("encrypted")))}fmt.Println("---------------UUIDv4---------------")for i := 0; i < 5; i++ {fmt.Println(UUIDv4())}fmt.Println("---------------UUIDv5---------------")for i := 0; i < 5; i++ {fmt.Println(UUIDv5([]byte("encrypted")))}
}

4. GUID介绍

GUID有两种解释:1.就是UUID 2.特指微软对UUID标准的实现(可能是v4,后文介绍)。可以具体语境去辨析是哪个意思。
GUID就是UUID的依据,可以参照以下:

  • 维基百科上直接把GUID进行了重定向到UUID页面。
  • GUID(也称为UUID)是一个 16 字节的结构,旨在用作对象的唯一标识符。此处引用微软官方文档。
  • cxx 类型定义中也可以看到UUID和GUID等价。
 typedef struct _GUID {unsigned long Data1;unsigned short Data2;unsigned short Data3;byte Data4[8];} GUID,UUID,*PGUID;

5. GUID 生成规则

参考文章
作者采用如下C#代码进行测试

/// <summary>
/// Simple script to check whether a C# Guid is really a UUID version 4.
/// </summary>
class Program
{static void Main(string[] args){Console.WriteLine($"{"Current",-10}{"Errors found",-10}");Console.WriteLine($"{"-------",-10}{"------------",-10}");var errorsFound = 0;for (var i = 0; i < 10_000_000; i++){var guid = Guid.NewGuid();var uuidVersion = guid.ToString().Substring(14, 1);var isVersion4 = uuidVersion == "4";if (!isVersion4){errorsFound += 1;}Console.Write($"\r{i, -10}{errorsFound, -10}   ");}Console.WriteLine();Console.ReadKey();}
}

结果显示

Current   Errors found
-------   ------------
9999999   0

猜测总归不是看了源码,所以我们只能做出如下结论:

GUID极可能是UUIDv4

6. GUID 生成代码

如果使用微软官方提供的API,有两种方式获取GUID

6.1 C#

在C#中 微软专门提供了一个Guid结构 来帮助人们生成GUID,命名空间为 System中 使用C#生成GUID的方法如下:
使用如下方法生成:
Guid.NewGuid()
如果要转换成为字符串使用,则可以使用如下方法:
Guid.NewGuid().ToString(string format)
其中 format 指示如何格式化GUID的格式 可以有不同的参数"N",“D”,“P”,“B”,null,当选择null时使用默认的参数"D"
使用C#语言生成 如下:

 string guid1 = Guid.NewGuid().ToString("N");string guid2 = Guid.NewGuid().ToString("D");string guid3 = Guid.NewGuid().ToString("P");string guid4 = Guid.NewGuid().ToString("B");

6.2 SQL server

比较运算符可与 uniqueidentifier 值一起使用。不过,排序不是通过比较两个值的位模式来实现的。可针对 uniqueidentifier 值执行的运算只有比较运算(=、<>、<、>、<=、>=)以及检查是否为 NULL(IS NULL 和 IS NOT NULL)。不能使用其他算术运算符。除 IDENTITY 之外的所有列约束和属性均可对 uniqueidentifier 数据类型使用。
具有更新订阅的合并复制和事务复制使用 uniqueidentifier 列来确保在表的多个副本中唯一地标识行。
sql server中 生成 GUID的时候 使用如下方法生成:

-- Creating a local variable with DECLARE/SET syntax.
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid)

输出结果为:

Value of @myid is: 9A09488E-7D1D-4995-9A7D-3AFB736CA3FE

注意,NEWID 对每台计算机返回的值各不相同。所显示的数字仅起解释说明的作用。
要想使用SQL server和C#中生成一样格式,在C#中要使用默认的参数"D",才能使SQL server 和C#中的格式一致

http://www.yayakq.cn/news/773082/

相关文章:

  • 网站名称在哪里注册做一家开发网站的公司
  • 动易企业网站英国做deal的网站
  • 网站建设四川冠辰品牌网站制作报价
  • 西安网站建设行业关键词搜索技巧
  • 网站推荐广告模板wordpress多级折叠
  • 网站建设的硬件支持建设龙卡e付卡网站
  • 电子商务网站建设评价外贸网站建设方案
  • 河北省建设机械协会网站经营性质网站备案
  • 网站域名价值查询姚孟信通网站开发中心
  • dedecms制作的网站国外wordpress主题风险
  • 德兴网站建设公司南昌做网站哪里好
  • 江门制作网站公司网络推广公司经营范围
  • 卫生局网站模板现在主流网站用什么做的
  • asp网站怎么做404页面跳转创业网站搭建设计方案
  • 银铃建设通官方网站企业网站优化分为
  • 图书馆网站建设的规章制度东莞三合一网站制作
  • 做报名网站网站营销推广策划书
  • 建设银行信用卡境外网站盗刷档案网站的建设
  • 做企业网站建设公司哪家好旅游开发公司网站建设方案书
  • 网站建设服务哪便宜做电影网站危险吗
  • 开封做网站用jsp做网站登录界面模板
  • asp网站怎么做301技术支持 东莞网站建设 轴承
  • 网站建设营销的公司网站建设中企动力优
  • 绍兴公司网站建设 中企动力绍兴甘肃省建设厅网站官网
  • 个人公众号做网站做网站需要留什么
  • 合肥网站建设哪家公司好wordpress轻博客模板
  • 网站域名后缀cc网站左侧分类导航菜单
  • 自学编程网站wordpress 搜索引擎平台
  • 电影网站开发库表结构企业门户网站建设与发展趋势
  • 万网网站后台管理软件开发文档的需求分析