import re


def validate_username(username: str) -> dict:
    """
    1. 长度大于等于 4
    2. 长度小于等于 20
    3. 仅含有字母、数字、下划线

    :param username: 用户名
    :return: 返回状态码
    """
    if len(username) < 4:
        return {'code': '102', 'msg': '用户名应不少于 4 位'}
    if len(username) > 20:
        return {'code': '103', 'msg': '用户名应不多于 20 位'}
    if re.search(r'[^A-Za-z0-9_]', username):
        return {'code': '104', 'msg': '用户名仅能含有字母、数字和下划线'}

    return {}