2017-04-06 67 views
0

我需要从IP地址生成唯一的ID(字符串),反之亦然。唯一的ID必须是8-9个字符。有什么可以在java中做到的功能吗?针对IP地址的散列函数

+1

检查此链接https://www.mkyong.com/java/java-convert-ip-address-to-decimal-number/ –

回答

2

由于IPv4地址由4个字节,你可以简单地使用十六进制表示,这将导致8个字符

这可能是一个实现:

public static String ipToId(String ip) { 
    return Arrays.stream(ip.split("\\.")) 
     .map(Integer::parseInt) 
     .map(number -> String.format("%02X", number)) 
     .collect(Collectors.joining()); 
} 

相反可以通过完成:

public static String idToIp(String id) 
{ 
    return Stream.of(id) 
      .map(DatatypeConverter::parseHexBinary) 
      .flatMapToInt(bytes -> IntStream.range(0, bytes.length) 
        .map(index -> bytes[index] & 0xFF)) 
      .mapToObj(String::valueOf) 
      .collect(Collectors.joining(".")); 
} 
+0

和IPv6的问题是不可能的,因为没有办法将16字节地址减少为8或9个字符串,而没有发生冲突风险 – Alnitak

+0

@MaxFichtelmann如何从输出字符串生成ip地址? –

+0

我已经添加了反向操作的功能 –