prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Visa now supports 19 digits credit card length
  reference: 
  https://www.freeformatter.com/credit-card-number-generator-validator.html 
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `faker/providers/credit_card/__init__.py`
  Content:
  ```
  1 # coding=utf-8
  2 from __future__ import unicode_literals
  3 from collections import OrderedDict
  4 
  5 from .. import BaseProvider
  6 
  7 
  8 class CreditCard(object):
  9 
  10     def __init__(
  11             self,
  12             name,
  13             prefixes,
  14             length=16,
  15             security_code='CVC',
  16             security_code_length=3):
  17         self.name = name
  18         self.prefixes = prefixes
  19         self.length = length
  20         self.security_code = security_code
  21         self.security_code_length = security_code_length
  22 
  23 
  24 class Provider(BaseProvider):
  25 
  26     # Prefixes from:
  27     # * https://en.wikipedia.org/wiki/Payment_card_number#Issuer_identification_number_.28IIN.29
  28     # * https://www.regular-expressions.info/creditcard.html
  29     # * https://creditcardjs.com/credit-card-type-detection
  30     prefix_maestro = ['5018', '5020', '5038', '56##', '57##', '58##',
  31                       '6304', '6759', '6761', '6762', '6763', '0604', '6390']
  32     prefix_mastercard = ['51', '52', '53', '54', '55', '222%']
  33     prefix_visa = ['4']
  34     prefix_amex = ['34', '37']
  35     prefix_discover = ['6011', '65']
  36     prefix_diners = ['300', '301', '302', '303', '304', '305', '36', '38']
  37     prefix_jcb16 = ['35']
  38     prefix_jcb15 = ['2131', '1800']
  39 
  40     credit_card_types = OrderedDict((
  41         ('maestro', CreditCard('Maestro',
  42                                     prefix_maestro, 12, security_code='CVV')),
  43         ('mastercard', CreditCard('Mastercard',
  44                                   prefix_mastercard, 16, security_code='CVV')),
  45         ('visa16', CreditCard('VISA 16 digit', prefix_visa)),
  46         ('visa13', CreditCard('VISA 13 digit', prefix_visa, 13)),
  47         ('amex', CreditCard('American Express', prefix_amex,
  48                             15, security_code='CID', security_code_length=4)),
  49         ('discover', CreditCard('Discover', prefix_discover)),
  50         ('diners', CreditCard('Diners Club / Carte Blanche', prefix_diners, 14)),
  51         ('jcb15', CreditCard('JCB 15 digit', prefix_jcb15, 15)),
  52         ('jcb16', CreditCard('JCB 16 digit', prefix_jcb16)),
  53     ))
  54     credit_card_types['visa'] = credit_card_types['visa16']
  55     credit_card_types['jcb'] = credit_card_types['jcb16']
  56 
  57     luhn_lookup = {'0': 0, '1': 2, '2': 4, '3': 6, '4': 8,
  58                    '5': 1, '6': 3, '7': 5, '8': 7, '9': 9}
  59 
  60     def credit_card_provider(self, card_type=None):
  61         """ Returns the provider's name of the credit card. """
  62         if card_type is None:
  63             card_type = self.random_element(self.credit_card_types.keys())
  64         return self._credit_card_type(card_type).name
  65 
  66     def credit_card_number(self, card_type=None):
  67         """ Returns a valid credit card number. """
  68         card = self._credit_card_type(card_type)
  69         prefix = self.random_element(card.prefixes)
  70         number = self._generate_number(self.numerify(prefix), card.length)
  71         return number
  72 
  73     def credit_card_expire(self, start='now', end='+10y', date_format='%m/%y'):
  74         expire_date = self.generator.date_time_between(start, end)
  75         return expire_date.strftime(date_format)
  76 
  77     def credit_card_full(self, card_type=None):
  78         card = self._credit_card_type(card_type)
  79 
  80         tpl = ('{provider}\n'
  81                '{owner}\n'
  82                '{number} {expire_date}\n'
  83                '{security}: {security_nb}\n')
  84 
  85         tpl = tpl.format(provider=card.name,
  86                          owner=self.generator.parse(
  87                              "{{first_name}} {{last_name}}"),
  88                          number=self.credit_card_number(card),
  89                          expire_date=self.credit_card_expire(),
  90                          security=card.security_code,
  91                          security_nb=self.credit_card_security_code(card))
  92 
  93         return self.generator.parse(tpl)
  94 
  95     def credit_card_security_code(self, card_type=None):
  96         """ Returns a security code string. """
  97         sec_len = self._credit_card_type(card_type).security_code_length
  98         return self.numerify('#' * sec_len)
  99 
  100     def _credit_card_type(self, card_type=None):
  101         """ Returns a random credit card type instance. """
  102         if card_type is None:
  103             card_type = self.random_element(self.credit_card_types.keys())
  104         elif isinstance(card_type, CreditCard):
  105             return card_type
  106         return self.credit_card_types[card_type]
  107 
  108     def _generate_number(self, prefix, length):
  109         """
  110         'prefix' is the start of the CC number as a string, any number of digits.
  111         'length' is the length of the CC number to generate. Typically 13 or 16
  112         """
  113         number = prefix
  114         # Generate random char digits
  115         number += '#' * (length - len(prefix) - 1)
  116         number = self.numerify(number)
  117         reverse = number[::-1]
  118         # Calculate sum
  119         tot = 0
  120         pos = 0
  121         while pos < length - 1:
  122             tot += Provider.luhn_lookup[reverse[pos]]
  123             if pos != (length - 2):
  124                 tot += int(reverse[pos + 1])
  125             pos += 2
  126         # Calculate check digit
  127         check_digit = (10 - (tot % 10)) % 10
  128         number += str(check_digit)
  129         return number
  130
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/faker/providers/credit_card/__init__.py b/faker/providers/credit_card/__init__.py
  --- a/faker/providers/credit_card/__init__.py
  +++ b/faker/providers/credit_card/__init__.py
  @@ -44,6 +44,7 @@
                                     prefix_mastercard, 16, security_code='CVV')),
           ('visa16', CreditCard('VISA 16 digit', prefix_visa)),
           ('visa13', CreditCard('VISA 13 digit', prefix_visa, 13)),
  +        ('visa19', CreditCard('VISA 19 digit', prefix_visa, 19)),
           ('amex', CreditCard('American Express', prefix_amex,
                               15, security_code='CID', security_code_length=4)),
           ('discover', CreditCard('Discover', prefix_discover)),
  
verification_info: {"golden_diff": "diff --git a/faker/providers/credit_card/__init__.py b/faker/providers/credit_card/__init__.py\n--- a/faker/providers/credit_card/__init__.py\n+++ b/faker/providers/credit_card/__init__.py\n@@ -44,6 +44,7 @@\n                                   prefix_mastercard, 16, security_code='CVV')),\n         ('visa16', CreditCard('VISA 16 digit', prefix_visa)),\n         ('visa13', CreditCard('VISA 13 digit', prefix_visa, 13)),\n+        ('visa19', CreditCard('VISA 19 digit', prefix_visa, 19)),\n         ('amex', CreditCard('American Express', prefix_amex,\n                             15, security_code='CID', security_code_length=4)),\n         ('discover', CreditCard('Discover', prefix_discover)),\n", "issue": "Visa now supports 19 digits credit card length\nreference: \r\nhttps://www.freeformatter.com/credit-card-number-generator-validator.html \n", "before_files": [{"content": "# coding=utf-8\nfrom __future__ import unicode_literals\nfrom collections import OrderedDict\n\nfrom .. import BaseProvider\n\n\nclass CreditCard(object):\n\n    def __init__(\n            self,\n            name,\n            prefixes,\n            length=16,\n            security_code='CVC',\n            security_code_length=3):\n        self.name = name\n        self.prefixes = prefixes\n        self.length = length\n        self.security_code = security_code\n        self.security_code_length = security_code_length\n\n\nclass Provider(BaseProvider):\n\n    # Prefixes from:\n    # * https://en.wikipedia.org/wiki/Payment_card_number#Issuer_identification_number_.28IIN.29\n    # * https://www.regular-expressions.info/creditcard.html\n    # * https://creditcardjs.com/credit-card-type-detection\n    prefix_maestro = ['5018', '5020', '5038', '56##', '57##', '58##',\n                      '6304', '6759', '6761', '6762', '6763', '0604', '6390']\n    prefix_mastercard = ['51', '52', '53', '54', '55', '222%']\n    prefix_visa = ['4']\n    prefix_amex = ['34', '37']\n    prefix_discover = ['6011', '65']\n    prefix_diners = ['300', '301', '302', '303', '304', '305', '36', '38']\n    prefix_jcb16 = ['35']\n    prefix_jcb15 = ['2131', '1800']\n\n    credit_card_types = OrderedDict((\n        ('maestro', CreditCard('Maestro',\n                                    prefix_maestro, 12, security_code='CVV')),\n        ('mastercard', CreditCard('Mastercard',\n                                  prefix_mastercard, 16, security_code='CVV')),\n        ('visa16', CreditCard('VISA 16 digit', prefix_visa)),\n        ('visa13', CreditCard('VISA 13 digit', prefix_visa, 13)),\n        ('amex', CreditCard('American Express', prefix_amex,\n                            15, security_code='CID', security_code_length=4)),\n        ('discover', CreditCard('Discover', prefix_discover)),\n        ('diners', CreditCard('Diners Club / Carte Blanche', prefix_diners, 14)),\n        ('jcb15', CreditCard('JCB 15 digit', prefix_jcb15, 15)),\n        ('jcb16', CreditCard('JCB 16 digit', prefix_jcb16)),\n    ))\n    credit_card_types['visa'] = credit_card_types['visa16']\n    credit_card_types['jcb'] = credit_card_types['jcb16']\n\n    luhn_lookup = {'0': 0, '1': 2, '2': 4, '3': 6, '4': 8,\n                   '5': 1, '6': 3, '7': 5, '8': 7, '9': 9}\n\n    def credit_card_provider(self, card_type=None):\n        \"\"\" Returns the provider's name of the credit card. \"\"\"\n        if card_type is None:\n            card_type = self.random_element(self.credit_card_types.keys())\n        return self._credit_card_type(card_type).name\n\n    def credit_card_number(self, card_type=None):\n        \"\"\" Returns a valid credit card number. \"\"\"\n        card = self._credit_card_type(card_type)\n        prefix = self.random_element(card.prefixes)\n        number = self._generate_number(self.numerify(prefix), card.length)\n        return number\n\n    def credit_card_expire(self, start='now', end='+10y', date_format='%m/%y'):\n        expire_date = self.generator.date_time_between(start, end)\n        return expire_date.strftime(date_format)\n\n    def credit_card_full(self, card_type=None):\n        card = self._credit_card_type(card_type)\n\n        tpl = ('{provider}\\n'\n               '{owner}\\n'\n               '{number} {expire_date}\\n'\n               '{security}: {security_nb}\\n')\n\n        tpl = tpl.format(provider=card.name,\n                         owner=self.generator.parse(\n                             \"{{first_name}} {{last_name}}\"),\n                         number=self.credit_card_number(card),\n                         expire_date=self.credit_card_expire(),\n                         security=card.security_code,\n                         security_nb=self.credit_card_security_code(card))\n\n        return self.generator.parse(tpl)\n\n    def credit_card_security_code(self, card_type=None):\n        \"\"\" Returns a security code string. \"\"\"\n        sec_len = self._credit_card_type(card_type).security_code_length\n        return self.numerify('#' * sec_len)\n\n    def _credit_card_type(self, card_type=None):\n        \"\"\" Returns a random credit card type instance. \"\"\"\n        if card_type is None:\n            card_type = self.random_element(self.credit_card_types.keys())\n        elif isinstance(card_type, CreditCard):\n            return card_type\n        return self.credit_card_types[card_type]\n\n    def _generate_number(self, prefix, length):\n        \"\"\"\n        'prefix' is the start of the CC number as a string, any number of digits.\n        'length' is the length of the CC number to generate. Typically 13 or 16\n        \"\"\"\n        number = prefix\n        # Generate random char digits\n        number += '#' * (length - len(prefix) - 1)\n        number = self.numerify(number)\n        reverse = number[::-1]\n        # Calculate sum\n        tot = 0\n        pos = 0\n        while pos < length - 1:\n            tot += Provider.luhn_lookup[reverse[pos]]\n            if pos != (length - 2):\n                tot += int(reverse[pos + 1])\n            pos += 2\n        # Calculate check digit\n        check_digit = (10 - (tot % 10)) % 10\n        number += str(check_digit)\n        return number\n", "path": "faker/providers/credit_card/__init__.py"}], "after_files": [{"content": "# coding=utf-8\nfrom __future__ import unicode_literals\nfrom collections import OrderedDict\n\nfrom .. import BaseProvider\n\n\nclass CreditCard(object):\n\n    def __init__(\n            self,\n            name,\n            prefixes,\n            length=16,\n            security_code='CVC',\n            security_code_length=3):\n        self.name = name\n        self.prefixes = prefixes\n        self.length = length\n        self.security_code = security_code\n        self.security_code_length = security_code_length\n\n\nclass Provider(BaseProvider):\n\n    # Prefixes from:\n    # * https://en.wikipedia.org/wiki/Payment_card_number#Issuer_identification_number_.28IIN.29\n    # * https://www.regular-expressions.info/creditcard.html\n    # * https://creditcardjs.com/credit-card-type-detection\n    prefix_maestro = ['5018', '5020', '5038', '56##', '57##', '58##',\n                      '6304', '6759', '6761', '6762', '6763', '0604', '6390']\n    prefix_mastercard = ['51', '52', '53', '54', '55', '222%']\n    prefix_visa = ['4']\n    prefix_amex = ['34', '37']\n    prefix_discover = ['6011', '65']\n    prefix_diners = ['300', '301', '302', '303', '304', '305', '36', '38']\n    prefix_jcb16 = ['35']\n    prefix_jcb15 = ['2131', '1800']\n\n    credit_card_types = OrderedDict((\n        ('maestro', CreditCard('Maestro',\n                                    prefix_maestro, 12, security_code='CVV')),\n        ('mastercard', CreditCard('Mastercard',\n                                  prefix_mastercard, 16, security_code='CVV')),\n        ('visa16', CreditCard('VISA 16 digit', prefix_visa)),\n        ('visa13', CreditCard('VISA 13 digit', prefix_visa, 13)),\n        ('visa19', CreditCard('VISA 19 digit', prefix_visa, 19)),\n        ('amex', CreditCard('American Express', prefix_amex,\n                            15, security_code='CID', security_code_length=4)),\n        ('discover', CreditCard('Discover', prefix_discover)),\n        ('diners', CreditCard('Diners Club / Carte Blanche', prefix_diners, 14)),\n        ('jcb15', CreditCard('JCB 15 digit', prefix_jcb15, 15)),\n        ('jcb16', CreditCard('JCB 16 digit', prefix_jcb16)),\n    ))\n    credit_card_types['visa'] = credit_card_types['visa16']\n    credit_card_types['jcb'] = credit_card_types['jcb16']\n\n    luhn_lookup = {'0': 0, '1': 2, '2': 4, '3': 6, '4': 8,\n                   '5': 1, '6': 3, '7': 5, '8': 7, '9': 9}\n\n    def credit_card_provider(self, card_type=None):\n        \"\"\" Returns the provider's name of the credit card. \"\"\"\n        if card_type is None:\n            card_type = self.random_element(self.credit_card_types.keys())\n        return self._credit_card_type(card_type).name\n\n    def credit_card_number(self, card_type=None):\n        \"\"\" Returns a valid credit card number. \"\"\"\n        card = self._credit_card_type(card_type)\n        prefix = self.random_element(card.prefixes)\n        number = self._generate_number(self.numerify(prefix), card.length)\n        return number\n\n    def credit_card_expire(self, start='now', end='+10y', date_format='%m/%y'):\n        expire_date = self.generator.date_time_between(start, end)\n        return expire_date.strftime(date_format)\n\n    def credit_card_full(self, card_type=None):\n        card = self._credit_card_type(card_type)\n\n        tpl = ('{provider}\\n'\n               '{owner}\\n'\n               '{number} {expire_date}\\n'\n               '{security}: {security_nb}\\n')\n\n        tpl = tpl.format(provider=card.name,\n                         owner=self.generator.parse(\n                             \"{{first_name}} {{last_name}}\"),\n                         number=self.credit_card_number(card),\n                         expire_date=self.credit_card_expire(),\n                         security=card.security_code,\n                         security_nb=self.credit_card_security_code(card))\n\n        return self.generator.parse(tpl)\n\n    def credit_card_security_code(self, card_type=None):\n        \"\"\" Returns a security code string. \"\"\"\n        sec_len = self._credit_card_type(card_type).security_code_length\n        return self.numerify('#' * sec_len)\n\n    def _credit_card_type(self, card_type=None):\n        \"\"\" Returns a random credit card type instance. \"\"\"\n        if card_type is None:\n            card_type = self.random_element(self.credit_card_types.keys())\n        elif isinstance(card_type, CreditCard):\n            return card_type\n        return self.credit_card_types[card_type]\n\n    def _generate_number(self, prefix, length):\n        \"\"\"\n        'prefix' is the start of the CC number as a string, any number of digits.\n        'length' is the length of the CC number to generate. Typically 13 or 16\n        \"\"\"\n        number = prefix\n        # Generate random char digits\n        number += '#' * (length - len(prefix) - 1)\n        number = self.numerify(number)\n        reverse = number[::-1]\n        # Calculate sum\n        tot = 0\n        pos = 0\n        while pos < length - 1:\n            tot += Provider.luhn_lookup[reverse[pos]]\n            if pos != (length - 2):\n                tot += int(reverse[pos + 1])\n            pos += 2\n        # Calculate check digit\n        check_digit = (10 - (tot % 10)) % 10\n        number += str(check_digit)\n        return number\n", "path": "faker/providers/credit_card/__init__.py"}]}