如何用C语言生成GUID?

2024-02-11

我想生成插入 SQLite 数据库的 guid(即数据库本身不支持)。但是,我想控制某些属性:

  1. 用于生成不断增加的指导值的有序性。
  2. 计算机独立性。数据库是公共的,可能/可能不希望 guid 允许某人将数据追溯到特定机器。
  3. “足够”的随机性。 guid 是数据库中的键,它将与许多其他数据库合并,并且可能会变得非常大,这意味着像许多算法那样伪造 guid 是不好的。
  4. 我可以使用系统特定的 API 来处理,但请链接 Windows 和 Linux 函数,并且首选 SQLite 之类的东西,我可以在其中使用其他人编写的代码。
  5. 我还更喜欢可以在商业应用程序中使用的代码。

寻找创建包含作者正在寻找的许多元素的 GUID 的答案的一个地方是 PHP 。https://www.php.net/uniqid https://www.php.net/uniqid.. 在他们的示例中,他们讨论了如何将服务器名称、数据库名称和其他元素添加到 GUID。

然而,为了满足对基于 C 的 GUID 函数的需求,这里是基于 JavaScript 函数的代码..如何创建 GUID/UUID? https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript..此示例使用 RegEx 创建 GUID。

下面的代码将基于 JavaSCript 示例创建 GUID。我确信还有更优雅的解决方案。这是一些拼凑在一起的东西,有助于为其他人提供一个清晰的榜样。

srand (clock());
char GUID[40];
int t = 0;
char *szTemp = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
char *szHex = "0123456789ABCDEF-";
int nLen = strlen (szTemp);

for (t=0; t<nLen+1; t++)
{
    int r = rand () % 16;
    char c = ' ';   
    
    switch (szTemp[t])
    {
        case 'x' : { c = szHex [r]; } break;
        case 'y' : { c = szHex [r & 0x03 | 0x08]; } break;
        case '-' : { c = '-'; } break;
        case '4' : { c = '4'; } break;
    }
    
    GUID[t] = ( t < nLen ) ? c : 0x00;
}

printf ("%s\r\n", GUID);

注意:字符串以 0x00 字符结尾。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用C语言生成GUID? 的相关文章

随机推荐

  • Python类属性引用

    这是我从 python 类教程之一中找到的示例代码 class MyClass i 12345 def f self return hello world print MyClass f print MyClass i 一旦我运行这个 我期
  • contenteditable="true" div 字符限制 [重复]

    这个问题在这里已经有答案了 您好 我正在尝试限制 contenteditable true div 中的文本 var char 500 counter append You have strong char strong chars lef
  • 具有多列的 WinForms 组合框(C#)?

    我当前正在使用以下代码来填充组合框 combobox DataSource datatable combobox DisplayMember Auftragsnummer combobox ValueMember ID 有没有办法显示多列
  • 恢复远程分支上的提交

    我曾在本地分支工作过 添加了许多提交 然后我把它推到了remote staging分支 现在我必须撤消已经推送到的最后一次提交remote staging这是我的本地分支的合并remote staging 查看其他答案时我了解到的是 我必须
  • VBA 中的舍入日期和时间

    如何使用 VBA 在 Excel 中四舍五入日期和时间 例如 用户从复制到单元格 A6 的日历中选择值 08 25 2016 09 02 00 我以 15 分钟为间隔提取数据 所以我希望它是 A6 08 25 2016 09 00 00 因
  • Azure DevOps 中的构建管道和发布管道有什么区别?

    我已经设置了几个多阶段构建管道Azure DevOps通过使用 yaml文件 我读过有关可用的 发布管道 的信息 我想知道它们有什么好处 他们似乎也在做同样的事情 甚至不提供 YAML 的支持 那么这里的主要区别是什么 使用发布管道而不是通
  • 记录 C 中“.h”文件使用模式的良好参考资料是什么? [复制]

    这个问题在这里已经有答案了 C 接口和实现 展示了一些有趣的数据结构使用模式 但我确信还有其他模式 http www amazon com Interfaces Implementations Techniques Addison Wesl
  • 是否可以将 ID 集合作为 ADO.NET SQL 参数发送?

    例如 我可以写这样的代码吗 public void InactiveCustomers IEnumerable
  • 如何在 Mac OS 中按“alt+a”/“option+a”键绑定(“⌥+a”)时禁用生成特殊字符? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图禁用我的 Mac 中的一种行为 当我在任何文本编辑器中输入组合键时alt option 任何字母 输出将是特殊字符 例如 组合alt
  • 如何将 Ruby 函数放入 SQLite3 查询中?

    我有一个函数需要放入 SQLite3 查询中 我有以下方法 def levenshtein a b case when a empty then b length when b empty then a length else a 0 b
  • 使用 Webpack 2 和 extract-text-webpack-plugin

    我将 extract text webpack plugin 2 0 0 rc 3 与 Webpack 2 2 1 一起使用 并且在运行构建时收到此错误 node modules extract text webpack plugin in
  • 谁拥有 .NET 中的包装流(例如 TextWriter)?

    我最近遇到错误 ObjectDisposeException 无法访问关闭的流 ObjectDisposedException Cannot access a closed Stream System IO MemoryStream Wri
  • python selenium webdriver safari 驱动程序

    快速提问 我一直在构建一个 python selenium 框架来测试我们的网站 我已经成功实现了 Firefox Chrome 和 IE 浏览器测试 但一直在寻找Safari驱动程序 我知道在官方文档中它简要描述了它的不兼容性并且不支持
  • Psycopg2 中的“类型错误:参数 2 必须是连接、游标或无”

    我设置了一个 Heroku 管道 并且刚刚为其启用了评论应用程序 它使用与我的登台和生产应用程序相同的代码库 相同的设置文件和所有内容 当审核应用程序启动时 它可以连接到创建的数据库并运行迁移 当我尝试连接到浏览器中的应用程序时 我得到 T
  • 服务器客户端通信Python

    Server import socket import sys s socket socket socket AF INET socket SOCK STREAM host VAC01 VACLab com port int 2000 s
  • request-promise-native 的替代方案[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找在 Node js 中实现基本 HTTP 方法 例如 GET POST 的现代模块 我想最受
  • 片段中的 EditText 和软键盘问题

    我目前正在构建一个 Android 应用程序 使用户能够拍照并写入其详细信息 该应用程序使用 Sherlock 库 我实现了一个 SherlockFragment 来显示图像 以及一些 EditText 和 TextView 来使用户能够键
  • 使用正则表达式匹配数字 - 仅数字和逗号

    我无法弄清楚如何为示例值构建正则表达式 123 456 789 12 34 1234 8 你可以帮帮我吗 什么是数字 我有一个简单的问题your 简单 问题 一个数字 到底是什么意思 Is 0一个号码 你对这个怎么看 1 Is or 一个号
  • 如何通过 ID 从另一个网站获取元素 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想通过其 ID 从另一个站点获取 div 的内容 比方说 我有一个网站 我想从这个 URL 获取 id 为 mainbar 的 di
  • 如何用C语言生成GUID?

    我想生成插入 SQLite 数据库的 guid 即数据库本身不支持 但是 我想控制某些属性 用于生成不断增加的指导值的有序性 计算机独立性 数据库是公共的 可能 可能不希望 guid 允许某人将数据追溯到特定机器 足够 的随机性 guid