def _isIPv6Addr(strIPv6Addr):
    """Confirm whether the specified address is an IPv6 address.

    :param str strIPv6Addr: IPv6 address string that adopted the full
        represented.
    :return: True when the specified address is an IPv6 address.
    :rtype: bool

    Example::

        strIPv6Addr                                  Return
        ---------------------------------------------------
        '2001:0dB8:0000:0000:0000:0000:0000:0001' -> True
        '2001:0dB8:0000:0000:0000:0000:0001'      -> False
        '2001:0dB8:0000:0000:0000:0000:0000:001'  -> False
        '2001:0dB8:0000:0000:0000:0000:0000:000g' -> False

    Test:
        >>> _isIPv6Addr('2001:0dB8:0000:0000:0000:0000:0000:0001')
        True
        >>> _isIPv6Addr('2001:0dB8:0000:0000:0000:0000:0001')
        False
        >>> _isIPv6Addr('2001:0dB8:0000:0000:0000:0000:0000:001')
        False
        >>> _isIPv6Addr('2001:0dB8:0000:0000:0000:0000:0000:000g')
        False
    """
    listStrIPv6Hextet = strIPv6Addr.split(':')
    if (len(listStrIPv6Hextet) != 8):
        return False

    for i in range(8):
        strHextet = listStrIPv6Hextet[i]
        if (len(strHextet) != 4):
            return False

        c1 = strHextet[0:1]
        c2 = strHextet[1:2]
        c3 = strHextet[2:3]
        c4 = strHextet[3:4]
        if (((c1 >= '0' and c1 <= '9') or (c1 >= 'a' and c1 <= 'f') or (c1 >= 'A' and c1 <= 'F')) and
            ((c2 >= '0' and c2 <= '9') or (c2 >= 'a' and c2 <= 'f') or (c2 >= 'A' and c2 <= 'F')) and
            ((c3 >= '0' and c3 <= '9') or (c3 >= 'a' and c3 <= 'f') or (c3 >= 'A' and c3 <= 'F')) and
            ((c4 >= '0' and c4 <= '9') or (c4 >= 'a' and c4 <= 'f') or (c4 >= 'A' and c4 <= 'F'))):
            pass
        else:
            return False

    return True