{"id":111,"date":"2014-07-04T00:59:28","date_gmt":"2014-07-03T16:59:28","guid":{"rendered":"http:\/\/googleglass.my\/blog\/?p=111"},"modified":"2014-07-04T01:03:21","modified_gmt":"2014-07-03T17:03:21","slug":"credit-card-number-generator-in-perl","status":"publish","type":"post","link":"https:\/\/gri.my\/blog\/credit-card-number-generator-in-perl\/","title":{"rendered":"Credit card number generator in Perl"},"content":{"rendered":"<p><!--more-->This Perl code generates valid MasterCard or Visa card number and uses my implementation of Luhn algorithm.<\/p>\n<p>To access the values you can do<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\n\r\n$ccvar= getcc();\r\n$cvvvar= getcvv();\r\n\r\n<\/pre>\n<p>which saves the credit card number to variable ccvar and CVV value to cvvvar. The full source as below.<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\n\r\n###########################################################\r\n# 11 Apr, 2014\r\n# Disclaimer: I believe some routines can be simplified. Sorry. I started writing this script with 0 knowledge of Perl, and learnt while writing.\r\n###########################################################\r\n\r\n# This program generates a valid MasterCard or Visa card number.\r\nmy $i;\r\nmy $numdigit=16;\r\nmy $numcvv=3;\r\nmy @ccnum;\r\nmy @cvv;\r\n\r\nsub getcvv\r\n{\r\n\u00a0\u00a0 \u00a0for ($i=1; $i&lt;=$numcvv; $i++)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$cvv&#x5B;$i] = int(rand(9));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$tempcvv=$tempcvv.$cvv&#x5B;$i];\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0return $tempcvv;\r\n}\r\n\u00a0\u00a0 \u00a0\r\n\r\nsub getcc\r\n{\r\n\u00a0\u00a0 \u00a0gencc();\r\n\u00a0\u00a0 \u00a0luhncorrectcc();\r\n\u00a0\u00a0 \u00a0for ($i=1;$i&lt;=$numdigit;$i++)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$tempcc=$tempcc.$ccnum&#x5B;$i];\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0return $tempcc;\r\n}\r\n\r\nsub sumofdigit\r\n{\r\n\u00a0\u00a0 \u00a0my $testvalue=$_&#x5B;0];\r\n\u00a0\u00a0 \u00a0my $sum=0;\r\n\u00a0\u00a0 \u00a0while ($testvalue)\r\n\u00a0\u00a0 \u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$sum+=$testvalue%10;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$testvalue\/=10;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0return $sum;\r\n}\r\n\r\nsub gencc\r\n{\r\n\u00a0\u00a0 \u00a0my $numprefix;\r\n\u00a0\u00a0 \u00a0my $choice=int(rand(5)) + 1;\r\n\u00a0\u00a0 \u00a0if($choice == 1){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;1]=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;2]=5;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;3]=3;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;4]=2;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$numprefix=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}if($choice == 2){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;1]=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;2]=5;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;3]=3;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;4]=9;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$numprefix=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}if($choice == 3){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;1]=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;2]=5;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;3]=5;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;4]=6;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$numprefix=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}if($choice == 4){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;1]=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;2]=7;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;3]=1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;4]=6;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$numprefix=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}if($choice == 5){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;1]=5;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;2]=1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$numprefix=2;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}if($choice == 6){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;1]=5;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;2]=4;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$numprefix=2;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0for ($i=$numprefix+1; $i&lt;=$numdigit; $i++)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$ccnum&#x5B;$i] = int(rand(9));\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n\r\nsub luhncorrectcc\r\n{\r\nmy $state=1;\r\nmy $sumofd=0;\r\nfor($i=$numdigit-1;$i&gt;0;$i--)\r\n{\r\n\u00a0\u00a0 \u00a0if($state)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$sumofd+=sumofdigit($ccnum&#x5B;$i] * 2);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$state=0;\r\n\u00a0\u00a0 \u00a0}else\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$sumofd+=$ccnum&#x5B;$i];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$state=1;\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n\r\n$sumofd=$sumofd*9;\r\n$sumofd=$sumofd%10;\r\n$ccnum&#x5B;$numdigit]=$sumofd;\r\n}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\r\n$ccvar= getcc();\r\n$cvvvar= getcvv();\r\nprint $ccvar;\r\nprint &quot;\\n&quot;.$cvvvar;\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-111","post","type-post","status-publish","format-standard","hentry","category-technical"],"_links":{"self":[{"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/posts\/111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":8,"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/posts\/111\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/posts\/111\/revisions\/120"}],"wp:attachment":[{"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/categories?post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gri.my\/blog\/wp-json\/wp\/v2\/tags?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}