diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java b/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java index 99f54ef2b..fb0d0e6ea 100755 --- a/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java @@ -31,18 +31,18 @@ public class HexUtil { * @return 是否为16进制 */ public static boolean isHexNumber(final String value) { - final int index = (value.startsWith("-") ? 1 : 0); - if (value.startsWith("0x", index) || value.startsWith("0X", index) || value.startsWith("#", index)) { - try { - //noinspection ResultOfMethodCallIgnored - Long.decode(value); - } catch (final NumberFormatException e) { - return false; - } - return true; + int index = (value.startsWith("-") ? 1 : 0); + if (value.startsWith("0x", index) || value.startsWith("0X", index)) { + index += 2; + } else if (value.startsWith("#", index)) { + index ++; } - - return false; + try { + new BigInteger(value.substring(index), 16); + } catch (final NumberFormatException e) { + return false; + } + return true; } // ---------------------------------------------------------------------------------------------------- encode diff --git a/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java index 3fc5654bd..aa43a2480 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java @@ -40,9 +40,16 @@ public class HexUtilTest { @Test public void isHexNumberTest() { - final String a = "0x3544534F444"; - final boolean isHex = HexUtil.isHexNumber(a); - Assert.assertTrue(isHex); + String a = "0x3544534F444"; + Assert.assertTrue(HexUtil.isHexNumber(a)); + + // https://gitee.com/dromara/hutool/issues/I62H7K + a = "0x0000000000000001158e460913d00000"; + Assert.assertTrue(HexUtil.isHexNumber(a)); + + // 错误的 + a = "0x0000001000T00001158e460913d00000"; + Assert.assertFalse(HexUtil.isHexNumber(a)); } @Test