2017-01-03 9 views
0

내가 생성 한 (19 자리) 일련 번호 :Luhn 순차 번호를 생성하고이를 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)에 있으며 다른 시스템에서는 테스트하지 않았습니다.

피씨 : 책임은 그것을 사용하십시오!

+0

이 코드를 실제로 테스트 했습니까? 그것은 나를 위해 작동하지 않습니다. Google 검색에서 예상되는 조회에서 복사하여 붙여 넣은 것처럼 보입니다. :-P – ghoti

+0

@ghoti : 그래, 나에게 잘 돌아갔다. 나는 시험 결과를 게시 할 수있다. – Inian

+0

@ghoti : 그 이유는 처음에 큰 면책 조항을 추가했습니다! – Inian