1 00:00:00,000 --> 00:00:13,290 2 00:00:13,290 --> 00:00:14,570 >> ROB BOWDEN: Hej, jag är Rob. 3 00:00:14,570 --> 00:00:17,610 Och jag hoppas att du debiteras upp för kredit. 4 00:00:17,610 --> 00:00:20,710 Så första vi måste göra är begära kreditkortet 5 00:00:20,710 --> 00:00:22,710 tal från användaren. 6 00:00:22,710 --> 00:00:25,060 Här använder vi getLongLong. 7 00:00:25,060 --> 00:00:29,070 Du kunde ha också använt getString, men i så fall skulle du behöva kontrollera 8 00:00:29,070 --> 00:00:32,340 att det inte fanns några icke-numerisk tecken i strängen. 9 00:00:32,340 --> 00:00:34,560 Så vi kommer att använda getLongLong. 10 00:00:34,560 --> 00:00:38,070 >> Kom ihåg att du inte kan använda något som getInt, eftersom antalet kommer att vara 11 00:00:38,070 --> 00:00:40,650 för stor för att passa in i ett heltal. 12 00:00:40,650 --> 00:00:44,480 När vi har det numret, vi se här denna while-slinga. 13 00:00:44,480 --> 00:00:48,210 Så detta medan slinga genomför Luhn algoritm som du 14 00:00:48,210 --> 00:00:50,980 se i pset spec. 15 00:00:50,980 --> 00:00:53,830 >> Och det är faktiskt går att vara lite smart. 16 00:00:53,830 --> 00:01:00,800 Så i pset spec, märker att Steg ett och två är separata. 17 00:01:00,800 --> 00:01:05,160 Vi går först över hela kreditkort nummer, letar efter alla andra 18 00:01:05,160 --> 00:01:09,775 tecken med början från den andra till sista tecknet, och multiplicera dem 19 00:01:09,775 --> 00:01:11,750 och lägga alla siffror. 20 00:01:11,750 --> 00:01:16,150 Sen efter det, vi lägger in alla de andra siffrorna. 21 00:01:16,150 --> 00:01:20,660 >> Så istället för att göra de i två separata steg, kommer vi att kombinera 22 00:01:20,660 --> 00:01:24,430 dem i en iteration över Hela kreditkortsnummer. 23 00:01:24,430 --> 00:01:29,710 Här ser vi int cur siffer jämlikar kreditkortsnummer, mod 10. 24 00:01:29,710 --> 00:01:32,050 Vad är kreditkortsnummer mod 10 med? 25 00:01:32,050 --> 00:01:35,750 Det ger oss den sista siffran i heltal. 26 00:01:35,750 --> 00:01:39,340 Så kom ihåg att om vi delade numrera upp med 10, sedan resten 27 00:01:39,340 --> 00:01:42,180 skulle vara vad den sista siffran är. 28 00:01:42,180 --> 00:01:46,560 23 delat med 10, den Resten kommer att vara 3. 29 00:01:46,560 --> 00:01:53,760 >> Så den sista siffran, nu här, ser vi vi förgrening på mult med 2. 30 00:01:53,760 --> 00:01:57,630 Så vad vi ska använda mult med 2 för är att skilja mellan 31 00:01:57,630 --> 00:02:02,110 en av "alla andra nummer från den andra siffran "nummer. 32 00:02:02,110 --> 00:02:08,310 Multipla med 2 kommer att börja som falskt, eftersom den sista siffran bör inte 33 00:02:08,310 --> 00:02:11,750 betraktas ur näst sista siffran. 34 00:02:11,750 --> 00:02:16,760 >> Så sedan i slutet av detta för slinga, vi ser att vi kommer att ändra detta 35 00:02:16,760 --> 00:02:18,870 från false till true. 36 00:02:18,870 --> 00:02:22,520 På nästa iteration av for-slingan, det kommer att vara sant tills 37 00:02:22,520 --> 00:02:25,090 I slutet, när vi ändrar den från sant till falskt. 38 00:02:25,090 --> 00:02:28,290 För då kommer vi att vara på den tredje till sista siffran, som inte är en av de 39 00:02:28,290 --> 00:02:32,210 siffror som vi ska multiplicera med 2. 40 00:02:32,210 --> 00:02:37,410 >> Så om vi råkar vara på en av dem siffror som vi vill multiplicera med 2, 41 00:02:37,410 --> 00:02:40,610 Vi ser att vi lägger till vår kontrollsumma. 42 00:02:40,610 --> 00:02:43,640 Och här, vi använder ternära operatören att en gång 43 00:02:43,640 --> 00:02:45,470 återigen vara lite smart. 44 00:02:45,470 --> 00:02:50,170 Så om nuvarande siffra är mindre än 5, då Vi kan bara göra cur siffran gånger 2. 45 00:02:50,170 --> 00:02:50,690 Det är enkelt. 46 00:02:50,690 --> 00:02:52,770 Om det är 1, då vill vi att lägga till 2. 47 00:02:52,770 --> 00:02:54,090 Om det är 2, vi vill lägga 4. 48 00:02:54,090 --> 00:02:55,530 Om det är 4, vi vill lägga till 8. 49 00:02:55,530 --> 00:02:57,400 >> Så vad är speciellt med 5? 50 00:02:57,400 --> 00:03:00,290 Tja, 5 gånger 2 är 10. 51 00:03:00,290 --> 00:03:05,920 Och kom ihåg från pset spec som Vi vill lägga till siffrorna i 52 00:03:05,920 --> 00:03:09,300 antalet gånger två, och inte antal gånger 2 själv. 53 00:03:09,300 --> 00:03:13,920 Så om det ursprungliga antalet är 7, är 7 gånger 2 14. 54 00:03:13,920 --> 00:03:18,930 Vi vill lägga till 1 plus 4 till antalet, inte 14. 55 00:03:18,930 --> 00:03:24,050 >> Så här, om antalet är 5 eller högre, vad vi gör är nuvarande siffra 56 00:03:24,050 --> 00:03:26,470 gånger 2 minus 9. 57 00:03:26,470 --> 00:03:29,940 Och om du tycker om det, 5 gånger 2 är 10. 58 00:03:29,940 --> 00:03:33,130 Och så vi lägger till 1, vilket är 10 minus 9. 59 00:03:33,130 --> 00:03:35,490 Och 6 gånger 2 är 12. 60 00:03:35,490 --> 00:03:38,380 Så vi lägger till 3, vilket är 12 minus 9. 61 00:03:38,380 --> 00:03:40,250 Och det fungerar för alla tal. 62 00:03:40,250 --> 00:03:43,330 >> Så det är vad vi lägger i vårt kontrollsumma. 63 00:03:43,330 --> 00:03:49,970 Och detta annat är vad som hanterar Step Två av Luhn algoritm, vilket är precis 64 00:03:49,970 --> 00:03:55,010 tillsats av den siffra, om det inte sker att vara en av de alla andra siffror. 65 00:03:55,010 --> 00:04:01,440 Så när vi har det, det är att hålla koll på de två första tecknen i 66 00:04:01,440 --> 00:04:05,220 kreditkortsnummer, två första siffror, eftersom vi så småningom kommer 67 00:04:05,220 --> 00:04:08,980 att vilja använda det här nere för att kontrollera, okej, har ett visum för att starta 68 00:04:08,980 --> 00:04:14,440 med detta, och ett American Express behov till att börja med detta, och så vidare. 69 00:04:14,440 --> 00:04:16,850 >> Slutligen gör vi kreditkort nummer är lika med kreditkort 70 00:04:16,850 --> 00:04:18,730 antal dividerat med 10. 71 00:04:18,730 --> 00:04:19,829 Varför gör vi det? 72 00:04:19,829 --> 00:04:22,070 Jo, precis hanterade vi den sista siffran. 73 00:04:22,070 --> 00:04:24,880 Dividera med 10 kommer att flytta hela numret över. 74 00:04:24,880 --> 00:04:27,150 Så nu när vi loop tillbaka, vi är kommer att hantera 75 00:04:27,150 --> 00:04:28,540 näst sista siffran. 76 00:04:28,540 --> 00:04:31,060 Sedan när vi träffar här igen, vi ska att skära av den näst sista 77 00:04:31,060 --> 00:04:35,060 siffra, slinga tillbaka, och om den tredje till sista siffran, och så vidare, till dess att 78 00:04:35,060 --> 00:04:40,120 antalet når 0, vid vilken punkt vi bryta sig ur while-slingan. 79 00:04:40,120 --> 00:04:43,560 >> Vi ska också hålla reda på kredit kortnummer längd, eftersom det är 80 00:04:43,560 --> 00:04:48,440 viktigt att skilja på om det är ett giltigt kreditkortsnummer. 81 00:04:48,440 --> 00:04:53,560 Så nu, när vi har beräknat kontrollsumma, kan vi avgöra om det 82 00:04:53,560 --> 00:04:55,180 är ett giltigt kort. 83 00:04:55,180 --> 00:04:58,010 Den kontrollsumma mod 10 är en del av Luhn algoritm. 84 00:04:58,010 --> 00:05:03,360 Om kontrollsumma mod 10 återgår något icke-noll, så kommer detta att returnera sant, 85 00:05:03,360 --> 00:05:06,650 i vilket fall, antalet skall vara ogiltig. 86 00:05:06,650 --> 00:05:12,590 >> Annars, om kontrollsumma mod 10 är 0, så vi kan fortsätta. 87 00:05:12,590 --> 00:05:18,360 Denna stora annars om säger, om det första två siffror är lika med AMEX 1, 88 00:05:18,360 --> 00:05:23,640 där upp här, ser vi att AMEX 1, enligt spec, är 34. 89 00:05:23,640 --> 00:05:26,595 Och vi ska också jämföra det till AMEX 2, vilket är 37. 90 00:05:26,595 --> 00:05:30,360 91 00:05:30,360 --> 00:05:34,210 Och kreditkortsnummer längd är som är lika med den förväntade American Express 92 00:05:34,210 --> 00:05:37,910 kort längd, då kan vi print American Express. 93 00:05:37,910 --> 00:05:41,920 >> Vi ska göra en liknande sak med Visa. 94 00:05:41,920 --> 00:05:51,940 De två första siffrorna måste vara större än eller lika med 40 eller mindre 95 00:05:51,940 --> 00:05:54,290 än eller lika med 49. 96 00:05:54,290 --> 00:05:57,180 De representerar giltiga Visa-kort. 97 00:05:57,180 --> 00:06:01,530 Och längden måste vara lika med Visa Längd 1 eller Visa Längd 2. 98 00:06:01,530 --> 00:06:07,320 Och så längden skall vara antingen 13 eller 16 siffror. 99 00:06:07,320 --> 00:06:12,240 >> Och slutligen med Mastercard, är det liknar Visa, att två första 100 00:06:12,240 --> 00:06:15,340 siffrorna måste vara i ett visst intervall, och längden måste 101 00:06:15,340 --> 00:06:19,440 vara exakt 16 siffror. 102 00:06:19,440 --> 00:06:24,390 Så om någon av dessa fall håller, då i det första fallet kommer vi att skriva ut AMEX. 103 00:06:24,390 --> 00:06:26,310 Om ärendet har, ska vi skriva ut visum. 104 00:06:26,310 --> 00:06:28,400 Om ärendet har, vi ska skriva ut Mastercard. 105 00:06:28,400 --> 00:06:32,170 >> Men om ingen av dem hålla, även Om checksumman var giltigt, 106 00:06:32,170 --> 00:06:33,900 vi fortfarande skriva ut ogiltiga. 107 00:06:33,900 --> 00:06:37,050 För det är inte en av dessa typer av kort. 108 00:06:37,050 --> 00:06:40,030 Mitt namn är Rob, och jag hoppas att du hittade kredit intressant. 109 00:06:40,030 --> 00:06:46,272