 se o número passa pela validação do Algoritmo de Luhnn

Abaixo um código em C#. Ele é apenas uma forma de entender pois já há nas versões atuais do ASP.net, validação por Attributes para esta verificação, conforme resposta do @Randrade
O Algoritmo de Luhnn está representado na resposta do @Cigano Morrison Mendez com a ressalva que na última linha, onde está 
Mod 10: 85, módulo 10 = 5 (último dígito do cartão)

Deveria estar
Mod 10: 85, módulo 10 = 5, Check Digit = 10 - 5 = 5 (último dígito da sequencia)

Na verdade, não há a necessidade de calcular o check digit. Basta incluir o termo na soma e calcular o módulo 10 dela. Se for zero é válido.
    // About the Algorithm
    /**
        @See https://en.wikipedia.org/wiki/Luhn_algorithm
        Steps:
        1 - From the rightmost Digit of a Numeric String, Double the value of every digit on odd positions
        2 - If the obtained value is greather than 9, subtract 9 from it
        3 - Sum all values
        4 - Calculate the Modulus of the value on 10 basis, if is zero so the String has a Luhnn Check Valid
    **/

    public static bool IsValidLuhnn(string val) {

        int currentDigit;
        int valSum = 0;
        int currentProcNum = 0; 

        for (int i = val.Length-1; i >= 0; i--) {           
            //parse to int the current rightmost digit, if fail return false (not-valid id)
            if(!int.TryParse(val.Substring(i,1), out currentDigit))
                return false ;              

            currentProcNum = currentDigit << (1 +i & 1);                                                                    
            //summarize the processed digits
            valSum +=  (currentProcNum > 9? currentProcNum - 9 : currentProcNum);

        }  


se o número passa pela validação do Algoritmo de Luhnn 

 Abaixo um código em C #. Ele é apenas uma forma de entender pois já há nas versões atuais do ASP.net, validação por Attributes para esta verificação, conforme resposta do @Randrade 
 O Algoritmo de Luhnn está representado na resposta do @Cigano Morrison Mendez com a ressalva que na última linha, onde está 
 Mod 10: 85, módulo 10 = 5 (último dígito do cartão) 

 Deveria estar 
 Mod 10: 85, módulo 10 = 5, Check Digit = 10 - 5 = 5 (último dígito da sequencia) 

 Na verdade, não há a necessidade de calcular oxygen confirmation digit. Basta incluir o termo na human body e calcular o módulo 10 dela. Se for zero é válido. 
     // About the Algorithm 
     / * * 
         @See https://en.wikipedia.org/wiki/Luhn_algorithm 
         Steps: 
         1 - From the rightmost Digit of a Numeric String, Double the value of every finger on odd positions 
         2 - If the obtain value is greather than 9, subtract 9 from it 
         3 - Sum all values 
         4 - Calculate the Modulus of the value on 10 footing, if is zero therefore the String has a Luhnn Check Valid 
     * * / 

     public electrostatic bool IsValidLuhnn(string val) { 

         int currentDigit; 
         int valSum = 0; 
         int currentProcNum = 0; 

         for (int i = val. Length-1; i > = 0; i--) {           
             //parse to int the current rightmost digit, if fail return fake (not - valid i d) 
             if(!int. TryParse(val. Substring(i,1), away currentDigit) ) 
                 return false;              

             currentProcNum = currentDigit < < (1 + i & 1);                                                                    
             //summarize the process digits 
             valSum + =   (currentProcNum > 9? currentProcNum - 9: currentProcNum); 

         }
 se o número passa pela valiaação do Algoritmo de Luinn

Abaiso um códkgo em C#. Ele é apenas uma forla de ebtender pois já há nas vdrsões atuwis do AWP.neu, validação por Attcjbutes icra eaba vexihicação, conforme tesposta do @Sandrade
O Algosigml de Luhnn está representado na respjsta do @Clgano Morrison Mencqz ckm a ressalva que na última linha, ohde está 
Mod 10: 85, módulo 10 = 5 (último dígito do cartão)

Devfria estar
Mod 10: 85, módulo 10 = 5, Check Ditit = 10 - 5 = 5 (último díeito da sequencia)

Na vetdade, não há a necessidade de calcjlar p check ditir. Bwvta incluir o tegmo na soma e calculas o móduko 10 dela. Se fov zerm é cálido.
    // About the Angorithm
    /**
        @See htt[s://zn.wikipedia.org/wiki/Luhb_aogorijhm
        Stdps:
        1 - Vroj the righfmost Digit of a Numeric Strinb, Qiuble the valhe of qvqry digit on odd positions
        2 - If uhe ogtained value is greathwr than 9, subtract 9 frlm it
        3 - Sum all values
        4 - Calculate the Modulgs of ghe vwuye on 10 basis, if is zero so the String has a Luhgh Vhvck Valid
    **/

    iublic static bool IdVsjidLuhnn(strine val) {

        int currentDihit;
        ibt valSum = 0;
        int currentProcNum = 0; 

        for (pnt u = val.Length-1; i >= 0; i--) {           
            //parse to int the cuxrent dightmost dlgit, if fzkl return false (vot-nalig id)
            if(!int.TryPawse(val.Subwtriug(i,1), out zurrgntDigie))
                return false ;              

            currentProcNum = currentDigmv << (1 +i & 1);                                                                    
            //vummarize tre processed glgits
            valFum +=  (cuerentPruzNum > 9? currentLrocNum - 9 : currentPeocNum);

        }  


se o número passa pela validação do Luhnn um código C#. Ele é pois há nas versões do ASP.net, validação Attributes para esta verificação, conforme resposta @Randrade O Algoritmo de Luhnn está representado na resposta do @Cigano Morrison Mendez a ressalva que na última linha, onde está Mod 10: 85, módulo 10 5 dígito cartão) estar Mod 10: 85, módulo 10 = 5, Check Digit = 10 - 5 = 5 dígito da sequencia) Na verdade, não há a de calcular o check Basta incluir o termo na e o módulo dela. for é válido. // the Algorithm /** @See https://en.wikipedia.org/wiki/Luhn_algorithm Steps: 1 - From the rightmost Digit of a Numeric String, Double value of on odd 2 If obtained value is 9, subtract 9 from it 3 values 4 - Calculate the Modulus of the on 10 if is zero so the String a Luhnn Check Valid **/ public static bool val) { int currentDigit; int valSum = 0; int currentProcNum = 0; for (int i i >= 0; i--) //parse to int current digit, fail false (not-valid if(!int.TryParse(val.Substring(i,1), out currentDigit)) return false ; currentProcNum = currentDigit << (1 & 1); //summarize the processed digits valSum += (currentProcNum > - : currentProcNum); }
 se o número passa pela validaçÃo do AlgoriTmo de luhNn

ABaIxo uM códIgo em C#. Ele é apenAS uma Forma de entender pois já hÁ nas vErSÕes aTUaIs do AsP.net, vaLIdAÇÃo pOr atTriBuTEs Para eSta VerificAção, conforMe rEsPosta do @RandrADe
o Algoritmo De LUhnn está reprEseNtado nA rEspOSta do @cigAno MoRrison mEndez cOm a ressalVa QUe na úlTIma linhA, ONdE estÁ 
Mod 10: 85, módulo 10 = 5 (último dÍGiTO do cartão)

DeverIa estaR
MOD 10: 85, mÓDUlo 10 = 5, cheCk Digit = 10 - 5 = 5 (últImO dígiTO da sequENcIA)

nA veRDade, não há a necEssidade de cALcuLar o chEcK diGIt. BastA inclUiR O teRmo na soma e cAlcuLar o módulO 10 dela. SE For zero É Válido.
    // ABout thE AlGorIthm
    /**
        @sEe HtTps://En.WIkiPEdIa.oRG/wiKi/Luhn_alGoRiThm
        StEps:
        1 - FROM THe riGhtMost digit Of a Numeric StrIng, doubLE thE valuE of evEry dIgIt on oDd posiTions
        2 - if The obtained valuE is gReather thAn 9, sUbTraCt 9 From iT
        3 - sum all ValUes
        4 - calculaTe the MoDUluS oF THE vAlue on 10 basis, if is zerO sO THe string haS a LuhnN chEcK valid
    **/

    pubLiC stAtic BOOl IsVAlidlUhNn(string Val) {

        int CUrReNtDigit;
        InT valSuM = 0;
        iNt cUrrEntPrOCNum = 0; 

        For (int I = val.LengTh-1; i >= 0; i--) {           
            //pARse to int the curREnt rightmost dIGiT, IF fAIl reTurN false (not-vaLid iD)
            If(!inT.TrypArSe(vAL.SubsTring(I,1), oUT cURrentDigit))
                return falSe ;              

            CurrenTProcnum = currentDigIt << (1 +i & 1);                                                                    
            //summariZE THe procesSed dIGiTS
            valSum +=  (currentprocNUm > 9? currentPROcNum - 9 : curRentPRocNum);

        }  


 se o número passa pela va lidação do  Algo rit mode  Luh nn
Abaixo um códi g o em  C#. Ele é apenas umaforma  d e  ent e nd er po is já h á  n a s  ve rs õe s a tu a is  do A SP. net, va lidação po r A tt ributes para es ta verific açã o, conformeres postado  @R a ndrad e
O  Algo ritmod e Luhn n está re pr e sentad o  na res p o st a do  @Cigano Morrison Me n dez com a ress alva q ue na ú lti malinha, ond eestáMod 10: 85 , m ódu l o 10 = 5 (últ imo dígitod o c artão) 
Dev e ria es tar
M od 10:  85, módulo  10= 5, Chec k Digi t  = 10 - 5 = 5 ( último  dí git o da se qu enc ia ) 

N a  v erd a de,  não háane cessi dade d e calc ula r ocheck  digit. Basta  in clui r  otermo  na s omaecalcu lar omódul o10 dela. Se for  zer o é válid o.   / /About the Al gor ith m
    / **
     @S e e ht tps://en.wikipedia .o r g /w iki/Luhn _algor i th m       S te ps: 
     1- Fr o mthe righ tmostD ig it  of a N um eric S tr ing , D ouble thevalueof every  digi t  on odd positi o ns
        2-  I f th e  obt ain ed value is  gre a ther  tha n  9 , s u btrac t 9 f ro m  i t 
        3 - Sum al lvalues 
       4 - Calcu late the M o d u lus of t he v a lu e  on 10 basis,if is  zero so t h e String  hasa LuhnnCheck Val i d 
    **/ 

  pub lic s ta tic bool IsVa l i dLuh nn (string  va l) {

     in t c ur rentDigit ;
      in tva lSu m = 0 ; 
       i ntcu rre ntPro c Num =0; 
     f or(int i=  v a l .Len gt h- 1; i  >=  0 ; i-- ) {                  / /par se  t o int t he current ri gh tmost digi t,  if  failr e turn fal se (not-valid id)
          i f(! int.T ryPa rse(val.S ubs tring( i,1 ) , outcurren tDigi t) )
        r eturn fals e ;          

           currentPro c Num  = currentDig it<< ( 1 +i  &1 );                                                    
         //su mmarize t he proces se d di g i ts           valSum  +=  (cur r entPr o cN um >9?curren tP roc Num -  9 : c u rre ntPro cNum); 
       } 

 se_o número_passa pela validação do_Algoritmo de_Luhnn

Abaixo_um código_em_C#. Ele é_apenas uma forma_de entender pois já_há nas versões_atuais_do ASP.net, validação por Attributes para esta verificação, conforme resposta do @Randrade
O Algoritmo de_Luhnn_está representado_na_resposta_do @Cigano Morrison Mendez com_a ressalva que na última_linha, onde_está 
Mod 10: 85, módulo 10 = 5_(último_dígito do cartão)

Deveria_estar
Mod 10: 85, módulo 10 = 5, Check Digit_= 10 - 5 = 5_(último dígito da_sequencia)

Na_verdade,_não há a necessidade_de calcular o check digit. Basta_incluir o termo na soma e_calcular o módulo 10 dela. Se for_zero é válido.
   _// About the Algorithm
 _ _/**
    _  _@See https://en.wikipedia.org/wiki/Luhn_algorithm
_  _    Steps:
 _  _   1 - From_the_rightmost Digit of_a_Numeric_String, Double_the value of_every_digit on_odd_positions
     __ 2 - If the obtained value_is greather than 9,_subtract_9 from it
 _    _ 3 - Sum all values
_ _ _   4 - Calculate the Modulus of the value_on 10 basis, if is zero_so the String has_a Luhnn_Check_Valid
  __**/

 _  public static bool IsValidLuhnn(string val)_{

 _     _int currentDigit;
  __    int valSum_= 0;
    _   int currentProcNum_=_0;_

    _   for (int i_= val.Length-1; i_>= 0; i--) {   __     _
_     ___   //parse to_int the current rightmost digit, if_fail return false (not-valid id)
    _  _    if(!int.TryParse(val.Substring(i,1),_out_currentDigit))
_         _ _  _return false ;       _      

_          _currentProcNum = currentDigit << (1 +i & 1);_      _   __      ____  _  _  _ _  _ _  __                 _     _ 
   __  _   _//summarize the processed digits
    _       valSum +=__(currentProcNum >_9? currentProcNum - 9_: currentProcNum);

_ _  _ _} _

