生成全球唯一标识符(序列号)

本文介绍了GUID的全球唯一性原理,强调其算法确保的唯一性,包括不同版本(如依赖时间、MAC地址和随机数)的特点。特别提到版本4因其随机性而广泛使用,如TextBox1.Text中的实例。
摘要由CSDN通过智能技术生成
    Private Sub But生成全球唯一标识符_Click(sender As Object, e As EventArgs) Handles But生成全球唯一标识符.Click
        'GUID(全局唯一标识符)设计为在全球范围内唯一,即使在不联网的设备上也能生成。
        '这种唯一性是通过算法确保的,而不是通过网络连接到某个中央数据库来验证唯一性。
        'GUID通常是128位长,这提供了极大的数值空间,使得重复的几率非常低。
        'GUID的生成算法包括几个版本,其中一些版本考虑到了时间戳、机器的网络地址(例如MAC地址),以及随机或伪随机数,确保每次生成的GUID都是独一无二的。
        '即使是在完全隔离的系统中,这些算法也能够生成唯一的标识符,因为它们利用了系统的内部状态和/或硬件特性。
        '虽然理论上存在重复的可能性,但由于数值空间极其庞大,这种可能性非常非常低。
        '以一种常见的比喻来说,生成重复GUID的几率,就像是在地球上随机挑选两粒沙子,发现它们是完全相同的那么低。
        '因此,在实际应用中,GUID被认为是足够安全的全球唯一标识符。

        'Guid(全局唯一标识符)有5个版本,每个版本都有不同的生成算法和格式。这些版本是:
        '1. 版本 1:基于时间和 MAC 地址(不推荐使用)。
        '2. 版本 2:基于时间、MAC 地址和 POSIX UID/GID。
        '3. 版本 3:基于命名空间和 MD5 散列。
        '4. 版本 4:基于随机数(最常用)。
        '5. 版本 5:基于命名空间和 SHA - 1 散列。
        '在实际开发中, 通常使用版本 4 的 Guid, 因为它是基于随机数生成的, 具有较高的唯一性。
        TextBox1.Text = Guid.NewGuid().ToString.ToUpper() '形如:59161738-342D-460F-BEC0-D161AEEC8E0B
    End Sub
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Java中,可以使用以下几种方式来实现生成唯一ID: 1. UUID(Universally Unique Identifier):UUID是一种标准的128位唯一标识符,可以通过Java的UUID类来生成。UUID的生成算法保证了生成的ID在全球范围内是唯一的,但是它的字符串形式比较长。 示例代码: ```java import java.util.UUID; public class UniqueIdGenerator { public static String generateUniqueId() { UUID uuid = UUID.randomUUID(); return uuid.toString(); } } ``` 2. Snowflake算法:Snowflake算法是Twitter开源的一种分布式ID生成算法,它可以生成一个64位的唯一ID。Snowflake算法的核心思想是将一个64位的ID分成多个部分,每个部分表示不同的信息,如时间戳、机器ID、序列号等。 示例代码: ```java public class UniqueIdGenerator { private static final long START_TIMESTAMP = 1622505600000L; // 设置起始时间戳,如2021-06-01 00:00:00 private static final long MACHINE_ID = 1L; // 设置机器ID,范围为0-1023 private static long sequence = 0L; private static long lastTimestamp = -1L; public static synchronized long generateUniqueId() { long currentTimestamp = System.currentTimeMillis(); if (currentTimestamp < lastTimestamp) { throw new RuntimeException("Clock moved backwards. Refusing to generate id."); } if (currentTimestamp == lastTimestamp) { sequence = (sequence + 1) & 4095; // 序列号部分取值范围为0-4095 if (sequence == 0) { currentTimestamp = tilNextMillis(lastTimestamp); } } else { sequence = 0L; } lastTimestamp = currentTimestamp; long id = ((currentTimestamp - START_TIMESTAMP) << 22) | (MACHINE_ID << 12) | sequence; return id; } private static long tilNextMillis(long lastTimestamp) { long timestamp = System.currentTimeMillis(); while (timestamp <= lastTimestamp) { timestamp = System.currentTimeMillis(); } return timestamp; } } ``` 这些是Java中常用的生成唯一ID的方式,你可以根据具体的需求选择合适的方式来生成唯一ID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赤脚_码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值