2017-01-03 41 views
0

我产生(19位)序列号这样的:如何生成Luhn Sequential数字并将它们保存在Linux中?

seq 1234496713247997000 1234496713247998000 > seq_numbers.txt 

,然后确认他们的在线使用LUHN检查。而不是采取两步法,我怎样才能像bash脚本一样,一次性完成这项工作,并只输出有效数字到文件中?

+1

你如何在命令行中调用'luhn'检查器? – Inian

+0

不知道,我会重新写上面的问题,所以它说bash文件 – Hopelessone

+0

你有什么尝试?我们大多数人都很乐意帮助你改进你的代码,但是却不太乐意担任短期无偿编程人员。在[MCVE](http://stackoverflow.com/help/mcve)中向我们展示您的工作,您期待的结果以及您获得的结果,我们将帮助您弄清楚。 – ghoti

回答

1

我没有从下面声明luhn checker算法的真实性。这是Rosetta Code页面的参考。

你可以使用它作为

#!/bin/bash 

function luhn_validate 
{ 
    num=$1 
    shift 1 

    len=${#num} 
    is_odd=1 
    sum=0 
    for((t = len - 1; t >= 0; --t)) { 
     digit=${num:$t:1} 

     if [[ $is_odd -eq 1 ]]; then 
      sum=$((sum + $digit)) 
     else 
      sum=$(($sum + ($digit != 9 ? ((2 * $digit) % 9) : 9))) 
     fi 

     is_odd=$((! $is_odd)) 
    } 

    # NOTE: returning exit status of 0 on success 
    return $((0 != ($sum % 10))) 
} 


for i in $(seq 1234496713247997000 1234496713247998000) 
do 
    if luhn_validate "$i"; then 
     echo "$i is valid" 
    else 
     echo "$i is not valid" 
    fi 
done 

你可以把它在一个脚本script.sh并设置执行权限chmod +x script.sh和运行作为

$ ./script.sh 

我能够使它发挥作用在GNU bash, version 4.3.46(2)-release (x86_64-pc-msys),并没有在其他系统上测试过。

P.S .:使用它需要您自担风险!

+0

你真的测试过这段代码吗?它不适合我。看起来你只是复制并粘贴了Google搜索中看起来很可能的内容。 :-P – ghoti

+0

@ ghoti:是的,它对我来说工作得很好,我可以发布测试结果,看起来很长。 – Inian

+0

@ghoti:这就是为什么在开始的时候增加了一个大声明! – Inian

相关问题