2017-04-06 94 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

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