車牌生成代碼車牌後5位生成代碼

車牌後5位序號編碼規則有三種,分別是:  

1、序號的每一位都使用阿拉伯數字;  

2、序號的每一位可單獨使用英文字母,26個英文字母中O和I不能使用;  

3、序號中允許出現2位英文字母,26個英文字母中O和I不能使用。

由於本人使用的是QT開發工具,下面就用QT來寫這個

//字母數組,不含I O 
const QStringList PLATE_EN{"A","B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M","N", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
                         "Y", "Z"};
//獲取車牌代碼函數
void GenPlate::genCarNumber()
{

    int count=0;//統計個數變量
    //存儲Txt文件
    QFile file("car_num.txt");
    //只寫模式
    file.open(QIODevice::WriteOnly);
    //第一步:寫入00000-99999號碼
    for(int i=0;i<100000;i++)
    {
        count++;
        //格式化數字爲5位數,不足補0
        QString tmpNum=QString("%1\r\n").arg(i,5,10,QLatin1Char('0'));
        //寫入文件
        file.write(tmpNum.toUtf8());
    }

    //第二步:獲取含有1位字母的號碼
    QStringList oneLetterNum=getNumStr(5);
    for(QString numStr:oneLetterNum)
    {
        count++;
        //寫入文件
        file.write((numStr+"\r\n").toUtf8());
    }

    //第三步:獲取含有2位字母的號碼
    for(int n=1;n<5;n++)
    {
        //獲取含有1位字母長度爲n的號碼
        QStringList numsList=getNumStr(n);
        //將獲取含有1位字母長度爲n的號碼+每A-Z個字母+後面的數字
        for(QString num:numsList)
        {
            for(QString str:PLATE_EN)
            {
                QString numStr=num+str;
                //當前不是第五位,則加後面的數字
                if(n<4)
                {
                    for(int j=0;j<qPow(10,4-n);j++)
                    {
                        count++;
                        //保留後面有幾位數,不夠補0
                        QString tmpNum=numStr+QString("%1").arg(j,4-n,10,QLatin1Char('0'))+"\r\n";
                        file.write(tmpNum.toUtf8());
                    }
                }
                //當前是第五位,後面沒有數字
                else
                {
                    count++;
                    file.write((numStr+"\r\n").toUtf8());
                }
            }
        }
    }
    file.flush();
    file.close();
    //輸出總數是多少
    qDebug()<<count;
}

//獲取含有1位字母長度爲n的號碼
QStringList GenPlate::getNumStr(int m)
{
    QStringList numStrs;
    for(int n=0;n<m;n++)
    {
        //循環前面的數字位數qPow(10,n)爲10的n次方(例如兩位數最大爲10*10 =100即0-99)
        for(int k=0;k<qPow(10,n);k++)
        {
            QString numStr="";

            for(QString str:PLATE_EN)
            {
                if(n>0)
                {
                    //前面有數字,加上
                    numStr=QString("%1").arg(k,n,10,QLatin1Char('0'))+str;
                }
                else
                { //前面沒有數字,第一位是字母
                    numStr=str;
                }
                //如果不是最後一位,加上所有後面的數字
                if(n<m-1)
                {
                    for(int j=0;j<qPow(10,m-n-1);j++)
                    {
                        //格式化位數,存數組
                        QString tmpStr=QString("%1").arg(j,m-n-1,10,QLatin1Char('0'));
                        numStrs<<numStr+tmpStr;
                    }
                }
                else
                {
                    //存數組
                    numStrs<<numStr;
                }

            }
        }
    }
    return  numStrs;
}

執行代碼後:

 輸出count爲:7060000個從00000-999ZZ

 

 

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