像 whatsapp 一样创建唯一的消息 ID
Create Unique Message Id Like whats app
我正在创建聊天应用程序,因此想要生成唯一的消息 ID。
是否可以永远不创建重复的消息 ID。
根据您糟糕的描述,您可以创建复合 ID。例如,您可以使用用户 ID+时间戳创建您的 ides。如果您使用此模式,您的用户 ID 长度对于所有 IDE 都必须相同。因此,如果不是,则必须在当前 ID 前添加“0”,以获得所有用户 ID 的相同长度
为了更好的描述:
String uniquemsgid= userid+ System.currentTimeMillis();
事实上,您的用户有一个唯一的 ID,时间戳对于该用户来说是唯一的。
注意:如果您只使用时间戳或任何格式的日期,此方法不能保证唯一的消息 ID。因为两个用户可以同时创建一条消息
生成一个的方法有很多种!一种常见的方法是生成时间戳值并将其用作唯一的 ID。
例如你可以这样做:
public int createID(){
Date now = new Date();
int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss", Locale.US).format(now));
return id; }
您也可以尝试将其设为字符串并添加任何特定的字符串格式,以根据您的应用需要使其更加独特!
你可以做一个Random randomId= new Random();
int id = randLan.nextInt(99999) + 1;
然后你检查是否已经给了Id,如果是,再试一次,如果没有,你有一个Id。
if(randomId == someOtherId),再做同样的处理。
您可能需要为此使用设备 IMEI 号码,它始终是唯一的并且很容易获得。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
在清单文件中添加以上权限,然后使用以下两行获取 IMEI。
TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
long id = Long.parseLong(mngr.getDeviceId());
MongoDB 的 ObjectId 相当复杂,从唯一 id 的角度来看可能是良好的随机性之一。
所以你可以偷偷看一下他们的源代码,看看他们是如何生成它的。
为后代保留官方文档中的定义:
ObjectIds are small, likely unique, fast to generate, and ordered.
ObjectId values consists of 12-bytes, where the first four bytes are a
timestamp that reflect the ObjectId’s creation, specifically:
a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.
Mongo 的 ObjectId 示例:
ObjectId("507f1f77bcf86cd799439011")
我正在创建聊天应用程序,因此想要生成唯一的消息 ID。 是否可以永远不创建重复的消息 ID。
根据您糟糕的描述,您可以创建复合 ID。例如,您可以使用用户 ID+时间戳创建您的 ides。如果您使用此模式,您的用户 ID 长度对于所有 IDE 都必须相同。因此,如果不是,则必须在当前 ID 前添加“0”,以获得所有用户 ID 的相同长度
为了更好的描述:
String uniquemsgid= userid+ System.currentTimeMillis();
事实上,您的用户有一个唯一的 ID,时间戳对于该用户来说是唯一的。 注意:如果您只使用时间戳或任何格式的日期,此方法不能保证唯一的消息 ID。因为两个用户可以同时创建一条消息
生成一个的方法有很多种!一种常见的方法是生成时间戳值并将其用作唯一的 ID。
例如你可以这样做:
public int createID(){
Date now = new Date();
int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss", Locale.US).format(now));
return id; }
您也可以尝试将其设为字符串并添加任何特定的字符串格式,以根据您的应用需要使其更加独特!
你可以做一个Random randomId= new Random();
int id = randLan.nextInt(99999) + 1;
然后你检查是否已经给了Id,如果是,再试一次,如果没有,你有一个Id。
if(randomId == someOtherId),再做同样的处理。
您可能需要为此使用设备 IMEI 号码,它始终是唯一的并且很容易获得。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
在清单文件中添加以上权限,然后使用以下两行获取 IMEI。
TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
long id = Long.parseLong(mngr.getDeviceId());
MongoDB 的 ObjectId 相当复杂,从唯一 id 的角度来看可能是良好的随机性之一。 所以你可以偷偷看一下他们的源代码,看看他们是如何生成它的。
为后代保留官方文档中的定义:
ObjectIds are small, likely unique, fast to generate, and ordered. ObjectId values consists of 12-bytes, where the first four bytes are a timestamp that reflect the ObjectId’s creation, specifically:
a 4-byte value representing the seconds since the Unix epoch, a 3-byte machine identifier, a 2-byte process id, and a 3-byte counter, starting with a random value.
Mongo 的 ObjectId 示例:
ObjectId("507f1f77bcf86cd799439011")