张经纬的博客-分享互联网

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 "您输入的卡号不合法";
}

原文链接(63 views)|暂无评论(赶紧抢沙发)

Perl 压缩 Js

sub compress {
	my ($codevalue)=@_;
	$codevalue =~ s/^\s+//;
	$codevalue =~ s/<!--(.*?)-->//g;
	$codevalue =~ s/(http|https):\/\//$1:~~/g;
	$codevalue =~ s/\s*\/\/.*?\n/\n/g;
	$codevalue =~ s/(http|https):~~/$1:\/\//g;
	$codevalue =~ s/(^| |\t)\/\/.*$//g;
	$codevalue =~ s!/\*.*?\*/\s*!!sg;
	$codevalue =~ s/(;|\n)\t+/$1/g;
	$codevalue =~ s/\n{2,}/\n/g;
	$codevalue =~ s/(if|else)\s*(\(.*?\))?\s*([\w\{])/$1$2$3/sg;
	$codevalue =~ s/[ \t]*([\=\,\+\-\*\&\|\:\?\< \>\{\}\(\)\[\]]+)[ \t]*/$1/g;
	$codevalue =~ s/^\s*\n//mg;
	$codevalue =~ s/(;)\s*/$1/g;
	$codevalue =~ s/(\r\n|\n)//g;
	$codevalue =~ s/({)(\s*?)(\S)/$1$3/g;
	return $codevalue;
}

原文链接(42 views)|暂无评论(赶紧抢沙发)