张经纬的博客 -

Luhn 算法的Perl实现

Luhn 算法主要应用在校键数字卡号的合法性,例如我们常见的银行卡,信用卡,ICCID号等等。

Luhn 算法简单的说,既从低位开始,基数位相加的和,与处理过的(将当前偶数位数字×2,若结果大于9,则将2位数字相加得到个位数,若结果小于等于9,直接记录这个值)偶数位相加的和的总和,若可被10整除,则合法,反之则不合法。

算法如下:

#!/usr/bin/perl
use strict;
use warnings;
 
#定义一个卡号
my $cardNum = "4367421590502289184";
 
sub luhnCheckNum{
	my $oddSum = 0;
	my $evenSum = 0;
	my $isOdd = 1;
	for(my $i=length($_[0])-1; $i>=0; $i--){
		my $iNum = substr($_[0],$i,1);
		if($isOdd){
			$oddSum += $iNum;
		}else{
			$iNum = $iNum*2;
			if($iNum>9){
				my @iNumArry = split(//, $iNum);
				$iNum = $iNumArry[0]+$iNumArry[1];
			}
			$evenSum += $iNum;
		}
		$isOdd = !$isOdd;
	}
	return (($evenSum + $oddSum)%10==0)
}
 
if(luhnCheckNum($cardNum)){
	print "您输入卡号合法";	
}else{
	print "您输入的卡号不合法";
}

原文链接|

目前 还没有人评论 ,点此发表评论