创建唯一消息ID喜欢什么应用程序

时间:2016-11-17 11:09:34

标签: java android uniqueidentifier

我正在创建聊天应用程序,因此需要生成唯一的消息ID。 是否有可能永远不会创建重复的消息ID。

5 个答案:

答案 0 :(得分:4)

MongoDB的ObjectId非常复杂,可能是从唯一身份角度来看的良好随机性之一。 因此,您可以偷看他们的源代码,看看他们是如何生成它的。

将这些定义从他们的官方文件中留给后人:

  

ObjectIds很小,可能很独特,生成和排序快。   ObjectId值由12个字节组成,其中前四个字节是a   反映ObjectId创建的时间戳,具体为:

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")

答案 1 :(得分:1)

根据您糟糕的描述,您可以创建复合ID。例如,您可以使用用户ID +时间戳创建您的ide。如果使用此模式,则所有ide的用户ID长度必须相同。所以,如果不是,你必须添加" 0"为您当前的id获取所有用户标识的相等长度

以获得更好的描述:

String uniquemsgid= userid+ System.currentTimeMillis();

事实上,您的用户拥有唯一ID,时间戳对此用户是唯一的。 警告:如果您只使用时间戳或任何格式的日期,则此方法无法保证唯一的消息ID。因为两个用户可以立刻创建一条消息

答案 2 :(得分:0)

可能有很多方法可以生成一个!一种常见的方法是生成时间戳值并将其用作id也是唯一的。

例如,你可以这样做:

public int createID(){    
Date now = new Date();    
int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss",  Locale.US).format(now));    
return id; }

您还可以尝试将其设置为字符串并添加任何特定的字符串格式,以便根据您的应用需求使其更加独特!

答案 3 :(得分:0)

你可以制作Random randomId= new Random(); int id = randLan.nextInt(99999) + 1; 然后你检查是否已经给出了Id,如果是,再试一次,如果没有,你有一个Id。

if(randomId == someOtherId),再次执行相同的过程。

答案 4 :(得分:0)

您可能希望使用设备IMEI号码,这始终是唯一且非常容易获得。

  <uses-permission android:name="android.permission.READ_PHONE_STATE" />

在清单文件中添加以上权限,然后使用以下两行获取IMEI。

TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
long id = Long.parseLong(mngr.getDeviceId());