You can use this method. I use it and take good result for many devices. You can added more than devices by calling adb shell getprop and read any unique value.
Reference : https://gist.github.com/flawyte/efd23dd520fc2320f94ba003b9aabfce
public static String getSerialNumber() {
    String serialNumber;
    try {
        Class<?> c = Class.forName("android.os.SystemProperties");
        Method get = c.getMethod("get", String.class);
        serialNumber = (String) get.invoke(c, "gsm.sn1");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ril.serialnumber");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.serialno");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "sys.serialnumber");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.boot.serialno");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.ril.oem.sno");
        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ril.cdma.esn");
        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.boot.ap_serial");
        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.vendor.hon.imei.num");
        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c,"ro.vendor.hon.extserial.num");
        if (serialNumber.equals("")){
            serialNumber= (String)get.invoke(c, "vendor.gsm.serial");
            serialNumber = serialNumber.substring(0,serialNumber.indexOf(' '));
        }
        if(serialNumber.equals(""))
            serialNumber = ((String)get.invoke(c,"ro.ril.oem.wifimac")).replace(":","");
        if (serialNumber.equals(""))
            serialNumber = ((String) get.invoke(c,"ro.ril.oem.btmac")).replace(":","");
        if (serialNumber.equals(""))
            serialNumber = Build.SERIAL;
        if (serialNumber.equals(Build.UNKNOWN))
            serialNumber = null;
    } catch (Exception e) {
        e.printStackTrace();
        serialNumber = null;
    }
    return serialNumber;
}