2017-01-03 9 views
0

Я генерировал (19 цифр) порядковые номера, как это:Как сгенерировать Luhn Последовательные номера и сохранить их в Linux?

seq 1234496713247997000 1234496713247998000 > seq_numbers.txt 

, а затем проверки их в Интернете с помощью Лун проверки. Вместо того, чтобы делать двухэтапный подход, как я могу сделать это как скрипт bash, например, всего за один раз, и выводить только допустимые числа в файл?

+1

Как вы вызываете «luhn' checker в командной строке? – Inian

+0

не уверен, я переписал вопрос выше, поэтому он говорит bash file – Hopelessone

+0

Что вы пробовали? Большинство из нас с удовольствием помогут вам улучшить свой код, но они менее счастливы в качестве неоплачиваемого персонала по заказу. Покажите нам свою работу в [MCVE] (http://stackoverflow.com/help/mcve), результат, который вы ожидали, и полученные результаты, и мы поможем вам разобраться. – ghoti

ответ

1

Я не утверждаю правдивость алгоритма проверки luhn снизу. Это ссылка с этой страницы 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