android 获得Android设备唯一标识码 ANDROID_ID+Build.SERIAL再进行MD5加密

android 获得Android设备唯一标识码 ANDROID_ID+Build.SERIAL再进行MD5加密

  • 前言
  • 选择

前言

先来读这篇文章,我觉得写的挺好的,也很全面:
如何唯一的标识一台Android设备?
相关内容就不重复了

选择

从上面那篇文章可知道没有最完美的方案,但是实际有需求还是要解决的,那就执行最可行方案
我选择的是 ANDROID_ID+Build.SERIAL再进行MD5加密
代码如下:

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.provider.Settings;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 获取android设备唯一标识码
 * created by dlong in 2019/02/21
 */
public class GetAndroidUniqueMark {

    public static String getUniqueId(Context context){
        @SuppressLint("HardwareIds")
        // ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后该数重置。
        String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        @SuppressLint("HardwareIds")
        String id = androidID + Build.SERIAL; // +硬件序列号
        try {
            return toMD5(id);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return id;
        }
    }
    public static String toMD5(String text) throws NoSuchAlgorithmException {
        //获取摘要器 MessageDigest
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        //通过摘要器对字符串的二进制字节数组进行hash计算
        byte[] digest = messageDigest.digest(text.getBytes());
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < digest.length; i++) {
            //循环每个字符 将计算结果转化为正整数;
            int digestInt = digest[i] & 0xff;
            //将10进制转化为较短的16进制
            String hexString = Integer.toHexString(digestInt);
            //转化结果如果是个位数会省略0,因此判断并补0
            if (hexString.length() < 2) {
                sb.append(0);
            }
            //将循环结果添加到缓冲区
            sb.append(hexString);
        }
        //返回整个结果
        return sb.toString().substring(8,24);
    }
}

代码不是我想出来的,从几篇文章整理出来的,但是已过很久,没找到源头。
但使用了好久没有问题,也没遇到版本兼容性的问题。
标转载。
完事。

你可能感兴趣的:(Android知识点)