QT下實現判斷IP地址和掩碼有效性的類

在寫程序時經常需要判斷用戶輸入的IP地址的有效性,以及掩碼的有效性,今天我寫了一個簡單的類實現這兩個功能。

#ifndef NETPARAMETERACK_H
#define NETPARAMETERACK_H

#include <QString>
#include <QStringList>

/*
 * 網絡參數有效性檢查
 */ 
class NetParameterAck
{
public:
    NetParameterAck();
    
    /*
     * static bool isIPv4(QString ip)
     * 
     * 靜態函數,檢查IPv4的IP地址的字符串有效性
     * 
     * 參數輸入字符串型點分十進制的IP地址,如果有效返回true
     * 否則返回false。
     */ 
    static bool isIPv4(QString ip){
        QStringList list = ip.split('.');
        if(list.size() != 4)
            return false;
        for(int i = 0; i < 4; i++){
            QString temp = list.at(i);
            if(i == 0){
                if(!(temp.toInt() > 0 &&
                     temp.toInt() < 256 &&
                     temp.at(0) != '0'))
                    return false;
            }
            else {
                if(!(temp.toInt() >= 0 &&
                     temp.toInt() < 256 &&
                     temp.size() > 0))
                    return false;
                else {
                    int num = temp.toInt();
                    int j = 0;
                    while (num > 0) {
                        j++;
                        num = num/10;
                    }
                    if(!(temp.size() == j ||
                         (temp.size() == 1 &&
                          j == 0)))
                        return false;
                }
            }
        }
        return true;
    }

    /*
     * static bool isMask(QString mask)
     * 
     * 靜態函數,判斷IPv4的點分十進制的掩碼的有效性,將掩碼
     * 轉化爲二進制的字符串,判斷是否有01組合。如果有則返回
     * false,否則返回true。
     */ 
    static bool isMask(QString mask){
        QStringList list = mask.split('.');

        if(list.size() != 4)
            return false;

        QString str;
        for(int i = 0; i < 4; i++)
        {
            str += QString("%1").arg(list.at(i).toInt(),8,2,QLatin1Char('0'));
        }

        if(str.indexOf("01") > 0)
            return false;
        return true;
    }
};

#endif // NETPARAMETERACK_H

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章