# TheId
**Repository Path**: xierui921326/TheId
## Basic Information
- **Project Name**: TheId
- **Description**: TheId,分布式唯一Id生成器,基于雪花算法(SnowFlake),可以生成更快,位数更短。多语言版本让Id可以在前端、后端、数据库中多端生成,支持JS/C#/JAVA/SQL/C语言。
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2022-12-07
- **Last Updated**: 2022-12-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://gitee.com/silis/TheId/star)
[](https://gitee.com/silis/TheId/fork)
[](https://gitee.com/silis/TheId/license/mit)
[](https://gitee.com/silis/TheId/free)
### 介绍
分布式唯一Id生成器,基于雪花算法(SnowFlake),可以生成更快,位数更短。多语言版本让Id可以在前端、后端、数据库中多端生成,支持JS/C#/JAVA/SQL/C语言。
### 分布式Id是什么?
分布式Id,指在不同地方生成的Id基本能保证唯一,这样就不需要集中在一个服务器上管理Id的生成。
### 分布式Id的结构
一个分布式Id,占用12个字节,24个16进制字符,相当于数据库中长度char(24)
> 1个Id = 12个字节 = 24个字符 = char(24)
> 1个字节 = 2个字符 = 8个bit
### JS版本示例
```
```
### C#版本示例
> Nuget搜索SiliS.Id安装

生成字符串类型的id
```
using App;
using System;
namespace App.Test
{
class Program
{
static void Main(string[] args)
{
var id = Id.GenerateString();
Console.WriteLine(id);
}
}
}
```
---
new一个带实体泛型的id对象
```
using App;
using System;
namespace App.Test
{
class Program
{
static void Main(string[] args)
{
var id = new Id;
Console.WriteLine(id.ToString());
}
}
}
```
### Java版本示例
```
package app.test;
import app.Id;
public class Program
{
public static void main(String []args)
{
String id = Id.generateString();
System.out.println(id);
}
}
```
### Sql Server版本示例
```
SELECT dbo.Id_GenerateChar(RAND()) --生成12byte的Id,再转成24byte的Char类型
SELECT dbo.Id11_GenerateChar(RAND()) --生成11byte的Id,再转成22byteChar类型
SELECT dbo.Id10_GenerateChar(RAND()) --生成10byte的Id,再转成20byte的Char类型
SELECT dbo.Id9_GenerateChar(RAND()) --生成9byte的Id,再转成18byte的Char类型
SELECT dbo.Id8_GenerateChar(RAND()) --生成8byte的Id,再转成16byte的Char类型
SELECT dbo.Id_GenerateBinary(RAND()) --生成12byte的Id,再转成12byte的Binary类型
SELECT dbo.Id11_GenerateBinary(RAND()) --生成11byte的Id,再转成11byte的Binary类型
SELECT dbo.Id10_GenerateBinary(RAND()) --生成10byte的Id,再转成10byte的Binary类型
SELECT dbo.Id9_GenerateBinary(RAND()) --生成9byte的Id,再转成9byte的Binary类型
SELECT dbo.Id8_GenerateBinary(RAND()) --生成8byte的Id,再转成8byte的Binary类型
SELECT dbo.Id8_GenerateInt(RAND()) --生成8byte的Id,再转成8byte的Int类型
```
> 由于自定义函数内不允许生成随机数(RAND),需要在调用方通过参数传入
### C语言示例
```
#include "id.c"
int main()
{
char* id = Id_generateString();
printf("%s", id);
free(id); //需要释放内存
return 0;
}
```
> 注意C语言版本,需要在调用完后主动释放id的内存