为每个用户生成唯一 ID

Generate unique ID per user

我正在开发一款跨平台游戏,我需要为每个用户生成唯一标识符(用户 ID)。我知道一些平台(Android 或 iOS)获取设备相关标识符的特定方法,但我正在寻找独立于设备标识符的解决方案。

用户 ID 要求:

  1. 独立于设备平台
  2. 离线实施(不与任何服务器通信)
  3. 没有注册过程

我已经实现了一种创建用户 ID 的方法,我在其中存储游戏在设备上首次启动时的系统时间。

我有以下问题:

  1. 是否有其他方法生成用户 ID(满足上述要求)?
  2. 通过获取用户的任何信息来创建唯一标识符的常用方法是什么?
  3. 是否有任何第三方插件可以实现用户 ID?

如果有任何关于此主题的建议和想法,我将不胜感激。

编辑:

有很多响应可以使用 UUID/GUID。一般来说,这种方法看起来不错,但我正在寻找一种即使用户重新安装游戏也可以生成相同用户 ID 的解决方案。

当您说用户 ID 时,您指的是 public ID,例如用户名或数据库 ID?

如果您谈论的是数据库 ID,请选择 GUID/UUID。例如,T-sql 具有 NEWID() 方法,该方法将 return 数据库中尚不存在的 GUID。我相信无论您使用哪个数据库,您都会找到使用 GUID 的方法。

https://docs.microsoft.com/en-us/sql/t-sql/functions/newid-transact-sql

你看过 Java 的 UUID 了吗?

https://docs.oracle.com/javase/7/docs/api/java/util/UUID.html

编辑:以下链接可能有助于使用 UUID 作为唯一标识符。

Best practices for permissions & Identifiers

Instance ID

根据我的看法,您的系统当前时间是生成唯一用户 ID 的最佳方法。

对于Android: System.currentTimeMillis() returns 您是唯一的 13 位数字 可以用作用户 ID。

但是当您在 iOS 中获取当前时间时,生成的是 10 位数字 。因此,您可以将其乘以 1000 以使用户 ID 平台独立。

编码愉快...

只是生成一长串随机字符。例如,生成一个 10 长的字母数字字符串 ...

private String GetId(){
    String[] chars = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"};
    StringBuilder s = new StringBuilder(10);

    for(int i = 0;i<10;i++){
        int pos = (int) (Math.random() * 62);
        String c = "";
        if (pos > chars.length-1){
            pos = pos - chars.length;
            c = chars[pos].toUpperCase();
        }else{
            c = chars[pos];
        }

        s.append(c);
    }

    return s.toString();
}