車牌後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