车牌后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