基于MATLAB的身份证号码识别源码(完美运行)
立即下载
资源介绍:
身份证号码识别是指将身份证号码的字符部分进行识别和解析,获取身份证号码所包含的信息。根据中华人民共和国国家标准《居民身份证号码》(GB 11643-1999),身份证号码由18位字符组成。其中,前6位是地址码,表示身份证持有人所在的行政区划;接下来的8位是出生日期码,表示身份证持有人的出生年月日;紧接着的3位是顺序码,表示身份证持有人在同一地址码所在地方的顺序码;最后一位是校验码,用于验证身份证号码的正确性。
身份证号码识别的过程可以通过使用OCR(Optical Character Recognition,光学字符识别)技术来实现。OCR技术可以将身份证上的字母、数字等字符转化为电子文本,然后通过对转化后的文本进行解析和验证来获取身份证号码的相关信息。
身份证号码识别在许多实际应用中具有重要的意义,例如银行开户、实名认证、人脸识别等场景中都需要对身份证号码进行识别和验证。目前市场上已经有许多基于OCR技术的身份证识别软件和服务可以使用,可以提高识别效率和准确性,减少人工操作的成本和错误率。
clc,clear,close all;
A=imread('sfID.jpg');
figure(1);
subplot(231)
imshow(A);title('原图');
B=~im2bw(A);%二值图
subplot(232);imshow(B);title('取反');
C=strel('line',20,0);
D=imdilate(B,C);%膨胀
subplot(233);imshow(D);title('膨胀');
mainfc;
bw_dilate_erode=imerode(D,strel('line',200,0));%腐蚀,创建直线长度200,角度0的直线作为腐蚀结构元素
subplot(234);imshow(bw_dilate_erode);title('腐蚀');
bw_re=imreconstruct(bw_dilate_erode,D);
subplot(235);imshow(bw_re);title('图像重建');
result=imreconstruct(bw_re,B);
subplot(236),imshow(result);title('定位');
[r,c]=find(result);
nextresult=result(min(r) :max(r),min(c):max(c));
mainfc;
[h,w]=size(nextresult);
hs=sum(nextresult);
a=1;b=1;i=1;
splitfs={};points=[];
figure
while(a0&&b2)
hresult=nextresult(:,a:b);
[r,c]=find(hresult);
result2=hresult(min(r):max(r),:);
m=min(r);n=max(r);
xi=hresult(m:n,:);
splitfs{i}=xi;
points=[points;m,n,a,b];
subplot(3,6,i),imshow(result2);
i=i+1;
end
a=b;
end
xs=[splitfs,points];
fonts='0123456789';
picSize=[20,50];
lastresult='身份证号是:';
Lastnv1='性别为:女';
Lastnv2='性别为:男';
for m_18=1:size(xs,2)-1
p=xs{m_18};
p=imresize(p,picSize);
for n_10=1:10
q=imread(strcat('pipei\',int2str(n_10),'.jpg'));
q=imresize(q,picSize);
matchrs(n_10)=corr2(p,q);
end
[~,k]=max(matchrs);
lastresult=strcat(lastresult, fonts(k));
if(m_18==size(xs,2)-1) %第17位数字,奇数是男,偶数是女
i=mod(fonts(k),2);
if(i==0)
Lastnv1=strcat(Lastnv1);
end
else
Lastnv1=strcat(Lastnv2);
end
end
lastresult
Lastnv1