用PowerQuery快速校验Excel
2023/4/15 来源:不详缺铜会引发白癜风吗 https://m-mip.39.net/fitness/mipso_7007739.html
有时候在工作中我们需要校验身份证号码是不是正确的,如果只做一次,那么用Excel公式来校验即可;如果需要经常校验,那么我建议用PowerQuery来校验。
校验其实很简单:
如果身份证号码不足18位,那么标记出来(也可以通过身份证校验公式自动补齐18位,在这篇文章中我没涉及这个主题);如果身份证号码是18位的,那么需要通过校验公式去校验它是不是乱编的。
我们要做的只是把身份证校验公式搬到PowerQuery中而已。
下面以我随便写的两个虚拟身份证作为例子来演示如何用PowerQuery校验身份证。
第一步:引入来自Excel区域的数据源。数据是我随手编的示例数据。
=Excel.CurrentWorkbook(){[Name=表1]}[Content]
第二步:标记不满18位的号码。
=Table.AddColumn(源,标记不足18位的身份证号,eachifText.Length([号码])18thenRenewelse[号码])
第三步:计算18位号码的余数。
=Table.AddColumn(标记不足18位的身份证号,计算余数,eachif[标记不足18位的身份证号]=RenewthenRenewelseNumber.Mod((Number.FromText(Text.At([号码],0))*7+Number.FromText(Text.At([号码],1))*9+Number.FromText(Text.At([号码],2))*10+Number.FromText(Text.At([号码],3))*5+Number.FromText(Text.At([号码],4))*8+Number.FromText(Text.At([号码],5))*4+Number.FromText(Text.At([号码],6))*2+Number.FromText(Text.At([号码],7))*1+Number.FromText(Text.At([号码],8))*6+Number.FromText(Text.At([号码],9))*3+Number.FromText(Text.At([号码],10))*7+Number.FromText(Text.At([号码],11))*9+Number.FromText(Text.At([号码],12))*10+Number.FromText(Text.At([号码],13))*5+Number.FromText(Text.At([号码],14))*8+Number.FromText(Text.At([号码],15))*4+Number.FromText(Text.At([号码],16))*2),11))
第四步:计算校验码。
=Table.AddColumn(计算余数,校验码,eachif[计算余数]=RenewthenRenewelseif[计算余数]=0then1elseif[计算余数]=1then0elseif[计算余数]=2thenXelseif[计算余数]=3then9elseif[计算余数]=4then8elseif[计算余数]=5then7elseif[计算余数]=6then6elseif[计算余数]=7then5elseif[计算余数]=8then4elseif[计算余数]=9then3else2)
第五步:更改校验码的格式,便于下一步校验。
=Table.TransformColumnTypes(校验码,{{校验码,typetext}})
第六步:进行校验。把通过校验的标记为Y,表示号码是OK的。如果不OK则标记为需要更新。
=Table.AddColumn(更改的类型1,比对校验码,eachif[校验码]=RenewthenRenewelseifText.Upper(Text.At([号码],17))=[校验码]thenYelseRenew)
至此,比对完成,将结果加载至Excel的sheet。今后有新的号码要校验时,只需要覆盖原始文件,然后点击选项卡上的按钮即可。
加载:
刷新:
全部代码: