【问题标题】:Hash Function For IP AddressIP地址的哈希函数
【发布时间】:2017-09-01 02:40:24
【问题描述】:

我需要从一个 IP 地址生成一个唯一的 ID(一个字符串),反之亦然。唯一 ID 必须为 8-9 个字符。有没有什么函数可以在java中做到这一点?

【问题讨论】:

标签: java hash ip-address uniqueidentifier


【解决方案1】:

由于 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( Base64.getDecoder()::decode )
            .flatMapToInt( bytes -> IntStream.range( 0, bytes.length )
                    .map( index -> bytes[index] & 0xFF ) )
            .mapToObj( String::valueOf )
            .collect( Collectors.joining( "." ) );
}

【讨论】:

  • 而对于 IPv6,这个问题是不可能的,因为没有办法将 16 字节的地址减少到 8 或 9 个字符串而不会有冲突的风险
  • @MaxFichtelmann 我们如何从输出字符串中生成 IP 地址?
  • 我添加了反向操作的功能
猜你喜欢
  • 2012-03-30
  • 1970-01-01
  • 2011-03-14
  • 2013-11-15
  • 2020-07-27
  • 2021-01-07
  • 2010-11-01
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多