我正在创建聊天应用程序,因此需要生成唯一的消息ID。 是否有可能永远不会创建重复的消息ID。
答案 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());