Closed OtavioVB closed 2 years ago
public Contract IsCreditCard(string val, string key = "",string message = "Invalid Credit Card number") { val = Regex.Replace(val, @"[^0-9]+", ""); if (string.IsNullOrWhiteSpace(val)) { AddNotification(key, message); return this; } var even = false; // instanciada aqui var checksum = 0; foreach (var digit in val.ToCharArray().Reverse()) { if (!char.IsDigit(digit)) { AddNotification(val, message); return this; } var value = (digit - '0') * (even ? 2 : 1); // é utilizada apenas aqui, mas seu valor já está definido;;; even = !even; while (value > 0) { checksum += value % 10; value /= 10; } } if (checksum % 10 != 0) AddNotification(key, message); return this; }
Como pode-se perceber no código comentado, o
operador ternário
não teve utilidade, já que a variável even sempre é instanciada como false... Além disso, seu valor após não é mais utilizado, apesar de haver uma inversão do valor booleano. Essa variável possui alguma função ao longo do projeto?
Pelo que entendi na lógica a cada passagem no foreach ele irá inverter o valor de even, portanto no primeiro dígito verificado ela é false e multiplica por 1, no segundo multiplica por 2 e assim por diante até o final do cálculo.
Caso pense em deixá-la somente como false ou não colocar o ternário, não haveria a multiplicação a cada dígito calculado.
Na lógica indica isto.
@eduprog Obrigado pela resposta! Vejo que não me atentei ao escopo do foreach
e acabei tirando a ideia de que era inútil o uso da variável... Mas, isso deu um grande norte para mim, já que a variável foi utilizada para realizar o algoritmo de Luhn como forma de validar o cartão de crédito.
Desse modo, agradeço a ajuda! Tudo certo com o código.
Como pode-se perceber no código comentado, o
operador ternário
não teve utilidade, já que a variável even sempre é instanciada como false... Além disso, seu valor após não é mais utilizado, apesar de haver uma inversão do valor booleano. Essa variável possui alguma função ao longo do projeto?