O algoritmo de Luhn, também chamado de módulo 10, é um método de soma de verificação, usado para validar números de identificação, como o IMEI de telefones celulares, cartões de crédito etc.
Esse algoritmo é simples. Obtemos o inverso do número a ser verificado (que contém apenas dígitos [0-9]); todos os números que ocupam uma posição par devem ser multiplicados por dois; se esse número for maior ou igual a 10, devemos adicionar os dígitos do resultado; o número a verificar será válido se a soma de seus dígitos finais for um múltiplo de 10.
Card Validation é um projeto que permite o usuário verificar se um número de cartão é válido ou não. Pra que o usuário consiga fazer essa verificação, foi utilizado a lógica do algoritmo de LUHN, apresentado na introdução.
- O projeto será entregue subindo o seu código no GitHub (commit/push) e o deploy será feito no GitHub Pages. Se não sabe o que é o GitHub, não se preocupe, você aprendera durante o projeto.
- Tempo para completar: tempo referência 2 semanas.
Use apenas caracteres numéricos (dígitos) no cartão para validar [0-9].
No README.md
, conte-nos como você pensou sobre os usuários e qual foi seu
processo para definir o produto final a nível da experiência e da interface.
- Quem são os principais usuários do produto.
- Quais os objetivos destes usuários em relação a seu produto.
- Como você considera que o produto que está criando resolverá os problemas dos usuários.
A interface deve permitir ao usuário:
- Inserir o número que desejamos validar.
- Constatar se o resultado é válido ou não.
- Ocultar todos os dígitos do número do cartão, excetuando os últimos 4 caracteres.
- Não deve poder inserir um campo vazio.
Antes de começar a codificar, você deve entender o problema que deseja resolver e como o aplicativo o resolve.
- Trabalhe seu primeiro protótipo com papel e lápis (preto e branco).
- Em seguida, valide esta solução com uma companheira (peça feedback).
- Use o aprendizado no momento de validar seu primeiro protótipo e desenvolva um
novo protótipo empregando alguma ferramenta para design de protótipos
(Balsamiq, Figma,
Apresentações Google etc.)
Esses pontos serão apresentados no
README.md
.
Ele deve conter o seguinte:
- Um título com o nome do seu projeto.
- Um resumo de 1 ou 2 linhas sobre o seu projeto.
- A imagem final do seu projeto.
- Pesquisa UX:
- Explicar quem irá usá-lo e os objetivos quanto ao produto.
- Explicar como o produto resolve os problemas/necessidades desses usuários.
- Em seguida, você colocará a foto do seu primeiro protótipo no papel.
- Adicionar um resumo do feedback recebido indicando as melhorias a serem feitas.
- Imagem do protótipo final.
Você precisará definir exatamente o protótipo final que você criou na ferramenta de design de protótipos que você escolheu usando HTML e CSS. Nesse momento, você escolherá as cores, o tipo de fonte etc. que irá usar.
Abaixo, descrevemos os arquivos que você usará:
Este arquivo contém o conteúdo que será exibido ao usuário (esqueleto HTML). Você encontrará três marcadores iniciais que, se você quiser, poderá excluir e começar do zero:
<header>
: cabeçalho do seu projeto.<main>
: conteúdo principal do seu projeto.<footer>
: rodapé do seu projeto.
Este arquivo deve conter as regras de estilo. Queremos que você escreva suas próprias regras. Por isso, o uso de estruturas CSS (Bootstrap, materialize etc.) NÃO é permitido.
- A lógica do projeto deve ser totalmente implementada em JavaScript.
- NÃO é permitido usar bibliotecas ou frameworks neste projeto, apenas JavaScript puro, também conhecido como JavaScript Vanilla.
Você terá 2 arquivos JavaScript que separam responsabilidades, eis o que você fará em cada arquivo:
Aqui você escreverá as funções necessárias para que o usuário possa verificar o cartão de crédito e ocultar os dígitos do número do cartão. Esta função deve ser pura e independente do DOM.
Para isso, você deve implementar o validador de objeto
, que já está
exportado no boilerplate. Este objeto (validador
) contém dois métodos
(isValid
e maskify
):
-
validator.isValid(creditCardNumber)
:creditCardNumber
é umstring
com o número do cartão a ser verificado. Esta função deve retornar umboolean
, dependendo de sua validade, de acordo com o algoritmo de Luhn. -
validator.maskify(creditCardNumber)
:creditCardNumber
é umstring
com o número do cartão e esta função deve retornar umstring
onde todos, exceto os últimos quatro caracteres, são substituídos por um número (#
) ou 🐱. Essa função deve sempre manter os quatro últimos caracteres intactos, mesmo quando ostring
for mais curto.Exemplo de uso:
maskify('4556364607935616') === '############5616' maskify( '64607935616') === '#######5616' maskify( '1') === '1' maskify( '') === ''
Aqui, você escreverá todo o código relacionado à interação do DOM (selecionar,
atualizar e manipular elementos do DOM e eventos). Ou seja, nesse arquivo, você
precisará ativar as funções isValid
e maskify
conforme seja necessário para
atualizar o resultado na tela (UI).
Nesse arquivo, você deverá concluir os testes de unidade das funções
validator.isValid(creditCardNumber)
e validator.maskify(creditCardNumber)
implementadas em validator.js
usando Jest. Seus
testes de unidade devem proporcionar 70% em coverage (cobertura), statements
(instruções), functions (funções) e lines (linhas); e um mínimo de 50% de
branches (ramificações).
Disponibilizar os projetos e colocá-los "no ar" vai ser parte cotidiana do ciclo de desenvolvimento em produtos de tecnologia.
Para este projeto, utilizaremos o Github Pages para essa finalidade.
O comando npm run deploy
pode te auxiliar nessa tarefa e você pode também
consultar a documentação oficial.
- Antes de tudo, verifique se você possui um 📝 editor de texto em boa condição, algo como Atom ou Code.
- Para executar os comandos abaixo, você precisará de um 🐚
Shell UNIX, que
é um pequeno programa que interpreta linhas de comando (command-line
interpreter), além de ter o
git
instalado. Se você usa um sistema operacional do tipo UNIX, como GNU/Linux ou
MacOS, já possui um shell (terminal) instalado por padrão (e provavelmente
git
) também. Se você usa o Windows, pode utilizar a versão completa do Cmder que inclui Git bash e, se tiver o Windows 10 ou superior, pode usar o Windows Subsystem for Linux. - ⬇️ Clone sua fork no seu computador (cópia local).
- 📦 Instale as dependências do projeto com o comando
npm install
. Isso pressupõe que você instalou Node.js (que inclui npm). - Se tudo correu bem, você poderá executar 🚥 testes de unidade
(unit tests) com o comando
npm test
. - Para visualizar a interface do seu programa no navegador, use o comando
npm start
para iniciar o servidor da web e acessehttp://localhost:5000
no seu navegador. - Comece a programar! 🚀
Aqui está um vídeo de Michelle que mostra o algoritmo de Luhn (o vídeo está em espanhol, mas pode ser útil) e mais algumas coisas que você deve saber para realizar este projeto. Ouça com atenção e siga os conselhos dela! :)
Design da experiência do usuário (User Experience Design):
- Concepção
- Prototipagem (desenho)
- Testes e iteração
Desenvolvimento de front-end:
- Valores
- Tipos
- Variáveis
- Controle de fluxo
- Testes unitários
- Documentação do NPM