翰林优商.apk(点击下载) / DeviceIdUtil.java


package com.zj.zjdsp.core.utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import com.zj.zjdsp.core.config.SdkConfig;
import com.zj.zmmkv.ZMMKV;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Locale;
import java.util.UUID;
import kotlin.UByte;

public class DeviceIdUtil {
    private static final String ZJ_UUID_KEY = "ZJ_UUID_VALUE";
    private static final String ZJ_UUID_SP_KV = "ZJ_CONFIG_UUID";

    public static String getDeviceId(Context context) {
        StringBuilder sb = new StringBuilder();
        String imei = getIMEI(context);
        String androidId = getAndroidId(context);
        String serial = getSERIAL();
        String deviceUUID = getDeviceUUID();
        if (imei != null && imei.length() > 0) {
            sb.append(imei);
            sb.append("|");
        }
        if (androidId != null && androidId.length() > 0) {
            sb.append(androidId);
            sb.append("|");
        }
        if (serial != null && serial.length() > 0) {
            sb.append(serial);
            sb.append("|");
        }
        if (deviceUUID != null && deviceUUID.length() > 0) {
            sb.append(deviceUUID);
        }
        if (sb.length() > 0) {
            try {
                String bytesToHex = bytesToHex(getHashByString(sb.toString()));
                if (bytesToHex.length() > 0) {
                    return bytesToHex;
                }
            } catch (Exception unused) {
            }
        }
        return UUID.randomUUID().toString().replace("-", "");
    }

    public static String getIMEI(Context context) {
        try {
            return ((TelephonyManager) context.getSystemService("phone")).getDeviceId();
        } catch (Throwable unused) {
            return "";
        }
    }

    private static String getAndroidId(Context context) {
        try {
            return Settings.Secure.getString(context.getContentResolver(), "android_id");
        } catch (Exception unused) {
            return "";
        }
    }

    private static String getSERIAL() {
        try {
            return Build.SERIAL;
        } catch (Exception unused) {
            return "";
        }
    }

    public static String getDeviceUUID() {
        String str;
        SharedPreferences sharedPreferences = null;
        try {
            if (ZMMKV.IS_VALID) {
                str = ZMMKV.mmkvWithID(ZJ_UUID_SP_KV).decodeString(ZJ_UUID_KEY);
            } else if (SdkConfig.context == null) {
                return null;
            } else {
                sharedPreferences = SdkConfig.context.getSharedPreferences(ZJ_UUID_SP_KV, 0);
                str = sharedPreferences.getString(ZJ_UUID_KEY, "");
            }
        } catch (Throwable unused) {
            str = "";
        }
        if (str == null || str.length() <= 0) {
            str = UUID.randomUUID().toString().replace("-", "").toLowerCase();
            try {
                if (ZMMKV.IS_VALID) {
                    ZMMKV.mmkvWithID(ZJ_UUID_SP_KV).encode(ZJ_UUID_KEY, str);
                } else if (sharedPreferences != null) {
                    sharedPreferences.edit().putString(ZJ_UUID_KEY, str).apply();
                }
            } catch (Throwable unused2) {
            }
        }
        return str;
    }

    private static byte[] getHashByString(String str) {
        try {
            MessageDigest instance = MessageDigest.getInstance("SHA1");
            instance.reset();
            instance.update(str.getBytes(StandardCharsets.UTF_8));
            return instance.digest();
        } catch (Exception unused) {
            return "".getBytes();
        }
    }

    private static String bytesToHex(byte[] bArr) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bArr) {
            String hexString = Integer.toHexString(b & UByte.MAX_VALUE);
            if (hexString.length() == 1) {
                sb.append("0");
            }
            sb.append(hexString);
        }
        return sb.toString().toUpperCase(Locale.CHINA);
    }
}