生成11位的纯数字非0开头的唯一userid
时间: 2024-03-15 17:47:20 浏览: 26
生成11位的纯数字非0开头的唯一userid的方法可以基于Snowflake算法。Snowflake算法是Twitter开源的分布式唯一ID生成算法,其核心思想是生成一个64位的ID,其中高41位是时间戳,接着是10位的机器ID和12位的序列号。具体的实现方式可以是将机器ID设置为固定的值,然后使用时间戳和序列号生成唯一ID。下面是一个示例代码:
```python
import time
class Snowflake:
def __init__(self, machine_id):
self.machine_id = machine_id
self.last_timestamp = 0
self.sequence = 0
def generate_id(self):
timestamp = int(time.time() * 1000)
if timestamp < self.last_timestamp:
raise Exception('Clock moved backwards')
elif timestamp == self.last_timestamp:
self.sequence = (self.sequence + 1) & 0xfff
if self.sequence == 0:
timestamp = self.wait_for_next_millis(self.last_timestamp)
else:
self.sequence = 0
self.last_timestamp = timestamp
return ((timestamp - 1577808000000) << 22) | (self.machine_id << 12) | self.sequence
def wait_for_next_millis(self, last_timestamp):
timestamp = int(time.time() * 1000)
while timestamp <= last_timestamp:
timestamp = int(time.time() * 1000)
return timestamp
# 使用机器ID为1来生成唯一ID
snowflake = Snowflake(1)
def generate_userid():
while True:
# 生成唯一ID
userid = snowflake.generate_id()
# 将ID转换为11位数字,如果开头为0,则重新生成ID
if str(userid)[:1] != '0':
return int(str(userid)[:11])
```
该代码使用机器ID为1来生成唯一ID,然后将ID转换为11位数字,如果开头为0,则重新生成ID。由于Snowflake算法的特性,生成的ID是唯一的,并且按照时间顺序递增。