{"id":15681315,"url":"https://github.com/asoftwareworld/asw-credit-card-validator","last_synced_at":"2025-05-07T10:34:19.642Z","repository":{"id":46112084,"uuid":"370799889","full_name":"asoftwareworld/asw-credit-card-validator","owner":"asoftwareworld","description":"ASW Card Validator library validates masking and card numbers, with the help of Luhn's algorithm using Angular. Identify card type VISA, Amex, China UnionPay, Dankort, Diners, Discover, Elo, Hipercard, JCB, Maestro, and Mastercard, and verify the card number based on digits.","archived":false,"fork":false,"pushed_at":"2024-11-09T16:10:10.000Z","size":2264,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T10:33:13.387Z","etag":null,"topics":["angular","angular-card-validator","angular-credit-card-validator","angularmaterial","asoftwareworld","asw","asw-card-validator","cardexpiry","credit-card","creditcard","cvv","date","debitcard","validation","validator"],"latest_commit_sha":null,"homepage":"https://asoftwareworld.com/product/card-validator","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asoftwareworld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-25T19:02:22.000Z","updated_at":"2024-11-20T13:47:45.000Z","dependencies_parsed_at":"2025-04-20T15:15:20.126Z","dependency_job_id":null,"html_url":"https://github.com/asoftwareworld/asw-credit-card-validator","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asoftwareworld%2Fasw-credit-card-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asoftwareworld%2Fasw-credit-card-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asoftwareworld%2Fasw-credit-card-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asoftwareworld%2Fasw-credit-card-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asoftwareworld","download_url":"https://codeload.github.com/asoftwareworld/asw-credit-card-validator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252860118,"owners_count":21815473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","angular-card-validator","angular-credit-card-validator","angularmaterial","asoftwareworld","asw","asw-card-validator","cardexpiry","credit-card","creditcard","cvv","date","debitcard","validation","validator"],"created_at":"2024-10-03T16:52:31.674Z","updated_at":"2025-05-07T10:34:19.574Z","avatar_url":"https://github.com/asoftwareworld.png","language":"TypeScript","funding_links":["https://paypal.me/asoftwareworld?locale.x=en_GB"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eASW Credit Card Validator - validate card numbers.\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/69723522/225834944-8ea6f27d-d02a-4903-91c3-bc97f9209251.svg\" alt=\"asw-logo\" width=\"310px\" height=\"100px\"/\u003e\n  \u003cbr\u003e\n  \u003ci\u003e`ASW Card Validator` library validates masking and card numbers, with the help of Luhn's algorithm using Angular.\u003c/i\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://asoftwareworld.com/#/product/card-validator\"\u003e\u003cstrong\u003eASW credit card validator demo\u003c/strong\u003e\u003c/a\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"CONTRIBUTING.md\"\u003eContributing Guidelines\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/asoftwareworld/asw-credit-card-validator/issues\"\u003eSubmit an Issue\u003c/a\u003e\n  ·\n  \u003ca href=\"https://asoftwareworld.com/#/product/card-validator\"\u003eBlog\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@asoftwareworld/card-validator\"\u003e\n    \u003cimg src=\"https://badge.fury.io/js/%40asoftwareworld%2Fcard-validator.svg\" alt=\"CI status\" /\u003e\n  \u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://circleci.com/gh/asoftwareworld/asw-credit-card-validator\"\u003e\n    \u003cimg src=\"https://circleci.com/gh/asoftwareworld/ASW-Form-Builder.svg?style=svg\" alt=\"Asw QR Code on npm\" /\u003e\n  \u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://github.com/asoftwareworld/asw-credit-card-validator/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"Discord conversation\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Documentation\n\n`ASW Card Validator` library validates masking and card numbers, with the help of Luhn's algorithm using Angular. Identify card type `VISA`, `Amex`, `China UnionPay`, `Dankort`,  `Diners`,  `Discover`, `Elo`, `Hipercard`, `JCB`, `Maestro`, and `Mastercard` and then verify the card number, based on digits.\n\n## Test card numbers\n| Card Type| Card Number       | Expiry Date|CVV                                                                                                     |\n| --------------- | --------------------|-------------|------------------------------------------------------------------------------ |\n| American Express (Amex)|3700 0000 0000 002|03/2030| 7373|\n| China UnionPay|6243 0300 0000 0001 |12/2029| 737    |\n| Dankort| 5019 5555 4444 5555| 03/2030| 737|\n|Diners|3600 6666 3333 44|03/2030|737|\n|Discover|6011 6011 6011 6611|03/2030|737|\n|Elo|5066 9911 1111 1118|03/2030|737|\n|Hipercard|6062 8288 8866 6688|03/2030|737|\n|JCB|3569 9900 1009 5841|03/2030|737|\n|Maestro|6771 7980 2100 0008|03/2030|737|\n|Mastercard|5555 3412 4444 1115|03/2030|737|\n|Visa|4166 6766 6766 6746|03/2030|737|\n\n## Installation\nBelow are some prerequisites before install `Card Validator`.\n\n### Step 1: Install Angular Material\nInstall `Angular Material` by running the following command:\n\n```html\nng add @angular/material\n```\n\n### Step 2: Install ASW Credit Card Validator\nInstall `Card Validator` to set up in the project by running the following command:\n```html\nnpm install @asoftwareworld/card-validator\n```\n\n### Step 3: Import the component modules\nImport the NgModule for each component you want to use:\n\n```\nimport { AswCardModule } from '@asoftwareworld/card-validator/card';\nimport { AswCardCvvModule } from '@asoftwareworld/card-validator/card-cvv';\nimport { AswCardDateModule } from '@asoftwareworld/card-validator/card-date';\nimport { CardCvvService, CardCvvValidator } from '@asoftwareworld/card-validator/common';\n// ...    \n@NgModule({\n    imports: [\n    // shown passing global defaults (optional)\n        AswCardModule,\n        AswCardCvvModule,\n        AswCardDateModule\n        ...\n    ],\n    providers: [\n        CardCvvService,\n        CardCvvValidator\n    ]\n    // ...\n})\nexport class AppModule { }\n```\n\n## Add a selector to HTML\nIn your template, use the component selector:\n```\n\u003csection\u003e\n    \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"col-md-6 mb-4\"\u003e\n            \u003cdiv class=\"card mb-4\"\u003e\n                \u003cdiv class=\"card-header py-3\"\u003e\n                    \u003ch5 class=\"mb-0\"\u003eAngular material\u003c/h5\u003e\n                \u003c/div\u003e\n                \u003cdiv class=\"card-body\"\u003e\n                    \u003cform [formGroup]=\"aswMatCardForm\"\u003e\n                        \u003cdiv class=\"row mb-4\"\u003e\n                            \u003cdiv class=\"col-12\"\u003e\n                                \u003cmat-form-field appearance=\"outline\" class=\"asw-full-width\"\u003e\n                                    \u003cmat-label\u003eCredit Card Number\u003c/mat-label\u003e\n                                    \u003casw-card formControlName=\"creditCard\" name=\"card\" [required]=\"required\"\u003e\u003c/asw-card\u003e\n                                    \u003cmat-error\n                                        *ngIf=\"aswMatCardForm.get('creditCard')?.invalid \u0026\u0026 (aswMatCardForm.get('creditCard')?.dirty || aswMatCardForm.get('creditCard')?.touched)\"\u003e\n                                        \u003cng-container *ngIf=\"aswMatCardForm.get('creditCard')?.errors?.['required']\"\u003e\n                                            Card number is required.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container *ngIf=\"aswMatCardForm.get('creditCard')?.errors?.['minlength']\"\u003e\n                                            Card number has invalid length.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container\n                                            *ngIf=\"aswMatCardForm.get('creditCard')?.errors?.['invalidCardNumber'] \u0026\u0026 !aswMatCardForm.get('creditCard')?.errors?.['required'] \u0026\u0026 !aswMatCardForm.get('creditCard')?.errors?.['minlength']\"\u003e\n                                            Card number is invalid.\n                                        \u003c/ng-container\u003e\n                                    \u003c/mat-error\u003e\n                                \u003c/mat-form-field\u003e\n                            \u003c/div\u003e\n                        \u003c/div\u003e\n                        \u003cdiv class=\"row mb-4\"\u003e\n                            \u003cdiv class=\"col-6\"\u003e\n                                \u003cmat-form-field appearance=\"outline\" class=\"asw-full-width\"\u003e\n                                    \u003cmat-label\u003eMM / YY\u003c/mat-label\u003e\n                                    \u003casw-card-date formControlName=\"cardDate\" [required]=\"required\"\u003e\u003c/asw-card-date\u003e\n                                    \u003cmat-error\n                                        *ngIf=\"aswMatCardForm.get('cardDate')?.invalid \u0026\u0026 (aswMatCardForm.get('cardDate')?.dirty || aswMatCardForm.get('cardDate')?.touched)\"\u003e\n                                        \u003cng-container *ngIf=\"aswMatCardForm.get('cardDate')?.errors?.['required']\"\u003e\n                                            Card date is required.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container\n                                            *ngIf=\"aswMatCardForm.get('cardDate')?.errors?.['invalidCardDate'] \u0026\u0026 !aswMatCardForm.get('cardDate')?.errors?.['required']\"\u003e\n                                            Card expired.\n                                        \u003c/ng-container\u003e\n                                    \u003c/mat-error\u003e\n                                \u003c/mat-form-field\u003e\n                            \u003c/div\u003e\n                            \u003cdiv class=\"col-6\"\u003e\n                                \u003cmat-form-field appearance=\"outline\" class=\"asw-full-width\"\u003e\n                                    \u003cmat-label\u003eCVV\u003c/mat-label\u003e\n                                    \u003casw-card-cvv formControlName=\"cvv\" name=\"card\" [required]=\"required\"\u003e\u003c/asw-card-cvv\u003e\n                                    \u003cmat-error\n                                        *ngIf=\"aswMatCardForm.get('cvv')?.invalid \u0026\u0026 (aswMatCardForm.get('cvv')?.dirty || aswMatCardForm.get('cvv')?.touched)\"\u003e\n                                        \u003cng-container *ngIf=\"aswMatCardForm.get('cvv')?.errors?.['required']\"\u003e\n                                            CVV is required.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container *ngIf=\"aswMatCardForm.get('cvv')?.errors?.['minlength']\"\u003e\n                                            Invalid CVV length.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container\n                                            *ngIf=\"aswMatCardForm.get('cvv')?.errors?.['invalidCardCvv'] \u0026\u0026 !aswMatCardForm.get('cvv')?.errors?.['required'] \u0026\u0026 !aswMatCardForm.get('cvv')?.errors?.['minlength']\"\u003e\n                                            CVV is invalid.\n                                        \u003c/ng-container\u003e\n                                    \u003c/mat-error\u003e\n                                \u003c/mat-form-field\u003e\n                            \u003c/div\u003e                            \n                        \u003c/div\u003e\n                        \u003cbutton class=\"btn btn-primary btn-lg btn-block\" type=\"submit\"\u003e\n                            Continue to checkout\n                        \u003c/button\u003e\n                    \u003c/form\u003e\n                \u003c/div\u003e\n            \u003c/div\u003e\n        \u003c/div\u003e\n\n        \u003cdiv class=\"col-md-6 mb-4\"\u003e\n            \u003cdiv class=\"card mb-4\"\u003e\n                \u003cdiv class=\"card-header py-3\"\u003e\n                    \u003ch5 class=\"mb-0\"\u003eBootstrap\u003c/h5\u003e\n                \u003c/div\u003e\n                \u003cdiv class=\"card-body\"\u003e\n                    \u003cform [formGroup]=\"aswBootstrapCardForm\"\u003e\n                        \u003cdiv class=\"row mb-4\"\u003e\n                            \u003cdiv class=\"col-12\"\u003e\n                                \u003cdiv class=\"form-outline\"\u003e\n                                    \u003clabel for=\"cardNumber\" class=\"form-label\"\u003eCredit Card Number\u003c/label\u003e\n                                    \u003casw-card aswDefaultStyles aswInputClass=\"form-control form-control-lg\" formControlName=\"creditCard\"\n                                        id=\"cardNumber\" placeholder=\"Enter credit card number\" name=\"card\"\n                                        [required]=\"required\"\u003e\u003c/asw-card\u003e\n                                    \u003cdiv class=\"invalid-feedback\"\n                                        *ngIf=\"aswBootstrapCardForm.get('creditCard')?.invalid \u0026\u0026 (aswBootstrapCardForm.get('creditCard')?.dirty || aswBootstrapCardForm.get('creditCard')?.touched)\"\u003e\n                                        \u003cng-container *ngIf=\"aswBootstrapCardForm.get('creditCard')?.errors?.required\"\u003e\n                                            Card number is required.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container *ngIf=\"aswBootstrapCardForm.get('creditCard')?.errors?.minlength\"\u003e\n                                            Card number has invalid length.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container\n                                            *ngIf=\"aswBootstrapCardForm.get('creditCard')?.errors?.invalidCardNumber \u0026\u0026 !aswBootstrapCardForm.get('creditCard')?.errors?.required \u0026\u0026 !aswBootstrapCardForm.get('creditCard')?.errors?.minlength\"\u003e\n                                            Card number is invalid.\n                                        \u003c/ng-container\u003e\n                                    \u003c/div\u003e\n                                \u003c/div\u003e\n                            \u003c/div\u003e                            \n                        \u003c/div\u003e\n                        \u003cdiv class=\"row mb-4\"\u003e\n                            \u003cdiv class=\"col-6\"\u003e\n                                \u003cdiv class=\"form-outline\"\u003e\n                                    \u003clabel for=\"cardexpiry\" class=\"form-label\"\u003eMM / YY\u003c/label\u003e\n                                    \u003casw-card-date aswInputClass=\"form-control form-control-lg\" id=\"cardexpiry\"\n                                        placeholder=\"Enter card expiry\" formControlName=\"cardDate\"\n                                        [required]=\"required\"\u003e\u003c/asw-card-date\u003e\n                                    \u003cdiv class=\"invalid-feedback\"\n                                        *ngIf=\"aswBootstrapCardForm.get('cardDate')?.invalid \u0026\u0026 (aswBootstrapCardForm.get('cardDate')?.dirty || aswBootstrapCardForm.get('cardDate')?.touched)\"\u003e\n                                        \u003cng-container *ngIf=\"aswBootstrapCardForm.get('cardDate')?.errors?.required\"\u003e\n                                            Card date is required.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container\n                                            *ngIf=\"aswBootstrapCardForm.get('cardDate')?.errors?.invalidCardDate \u0026\u0026 !aswBootstrapCardForm.get('cardDate')?.errors?.required\"\u003e\n                                            Card expired.\n                                        \u003c/ng-container\u003e\n                                    \u003c/div\u003e\n                                \u003c/div\u003e\n                            \u003c/div\u003e\n                            \u003cdiv class=\"col-6\"\u003e\n                                \u003cdiv class=\"form-outline\"\u003e\n                                    \u003clabel for=\"cardcvv\" class=\"form-label\"\u003eCVV\u003c/label\u003e\n                                    \u003casw-card-cvv aswInputClass=\"form-control form-control-lg\" id=\"cardcvv\"\n                                        placeholder=\"Enter card cvv\" formControlName=\"cvv\" name=\"card\"\n                                        [required]=\"required\"\u003e\u003c/asw-card-cvv\u003e\n                                    \u003cdiv class=\"invalid-feedback\"\n                                        *ngIf=\"aswBootstrapCardForm.get('cvv')?.invalid \u0026\u0026 (aswBootstrapCardForm.get('cvv')?.dirty || aswBootstrapCardForm.get('cvv')?.touched)\"\u003e\n                                        \u003cng-container *ngIf=\"aswBootstrapCardForm.get('cvv')?.errors?.required\"\u003e\n                                            CVV is required.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container *ngIf=\"aswBootstrapCardForm.get('cvv')?.errors?.minlength\"\u003e\n                                            Invalid CVV length.\n                                        \u003c/ng-container\u003e\n                                        \u003cng-container\n                                            *ngIf=\"aswBootstrapCardForm.get('cvv')?.errors?.invalidCardCvv \u0026\u0026 !aswBootstrapCardForm.get('cvv')?.errors?.required \u0026\u0026 !aswBootstrapCardForm.get('cvv')?.errors?.minlength\"\u003e\n                                            CVV is invalid.\n                                        \u003c/ng-container\u003e\n                                    \u003c/div\u003e\n                                \u003c/div\u003e\n                            \u003c/div\u003e\n                        \u003c/div\u003e\n                        \u003cbutton class=\"btn btn-primary btn-lg btn-block\" type=\"submit\"\u003e\n                            Continue to checkout\n                        \u003c/button\u003e\n                    \u003c/form\u003e\n                \u003c/div\u003e\n            \u003c/div\u003e\n        \u003c/div\u003e\n    \u003c/div\u003e\n\u003c/section\u003e\n```\n\nDefine in your component to get published event :\n\n```\nexport class AppComponent implements OnInit {\n    title = 'asw-credit-card-validator';\n    aswMatCardForm: FormGroup;\n    aswBootstrapCardForm: FormGroup;\n    cardNumber = '';\n    required = true;\n    disabled = true;\n    constructor(\n        private fb: FormBuilder) {\n        this.aswMatCardForm = this.fb.group({\n            creditCard: ['', [Validators.required]],\n            cvv: ['', [Validators.required]],\n            cardDate: ['', [Validators.required]]\n        });\n        this.aswBootstrapCardForm = this.fb.group({\n            creditCard: ['', [Validators.required]],\n            cvv: ['', [Validators.required]],\n            cardDate: ['', [Validators.required]]\n        });\n    }\n\n    ngOnInit(): void {\n        this.aswMatCardForm = this.fb.group({\n            creditCard: ['', [Validators.required, Validators.minLength(12)]],\n            cvv: ['', [Validators.required, Validators.minLength(3)]],\n            cardDate: ['', [Validators.required]]\n        });\n        this.aswBootstrapCardForm = this.fb.group({\n            creditCard: ['', [Validators.required, Validators.minLength(12)]],\n            cvv: ['', [Validators.required, Validators.minLength(3)]],\n            cardDate: ['', [Validators.required]]\n        });\n    }\n\n    submit(): void {\n    }\n}\n```\n## Theme\nAngular Material [more information](https://material.angular.io/components/categories) \n\n\n## List of Input parameters for AswCard\n| Input parameters| Default value       | Description                                                                                                     |\n| --------------- | --------------------|------------------------------------------------------------------------------------------- |\n| placeholder: string (optional)| | The placeholder is text shown when the label is floating but the input is empty.       |\n| required: boolean (optional)| false   | User must specify a value for the input is required or not.    |\n| disabled: boolean (optional)| false         | User must specify the input is disabled or not.|\n|aswDefaultStyles: boolean (optional)| false| `aswDefaultStyles` is a set of predefined CSS styles that are applied to the ASW Credit Card Validator library's components by default.|\n|aswInputClass: string (optional)| | `aswInputClass`property allows you to customize the styles of a component by specifying a custom CSS class for the component, which you can then define in your CSS file.|\n\n## List of Input parameters for AswCardDate\n| Input parameters| Default value       | Description                                                                                                     |\n| --------------- | --------------------|------------------------------------------------------------------------------------------- |\n| placeholder: string (optional)| | The placeholder is text shown when the label is floating but the input is empty.       |\n| required: boolean (optional)| false   | User must specify a value for the input is required or not.    |\n| disabled: boolean (optional)| false         | User must specify the input is disabled or not.|\n|aswInputClass: string (optional)| | `aswInputClass`property allows you to customize the styles of a component by specifying a custom CSS class for the component, which you can then define in your CSS file.|\n\n## List of Input parameters for AswCardCvv\n| Input parameters| Default value       | Description                                                                                                     |\n| --------------- | --------------------|------------------------------------------------------------------------------------------- |\n| placeholder: string (optional)| | The placeholder is text shown when the label is floating but the input is empty.       |\n| required: boolean (optional)| false   | User must specify a value for the input is required or not.    |\n| disabled: boolean (optional)| false         | User must specify the input is disabled or not.|\n|aswInputClass: string (optional)| | `aswInputClass`property allows you to customize the styles of a component by specifying a custom CSS class for the component, which you can then define in your CSS file.|\n\n\n## List of Components\n| Components        | Description                                                                                                     |\n| --------------- | --------------------------------------------------------------------------------------------------------------- |\n| Card            | Card validator validates masking and card numbers, with the help of Luhn's algorithm. Identify card type, `VISA`, `Amex`, `China UnionPay`, `Dankort`,  `Diners`,  `Discover`, `Elo`, `Hipercard`, `JCB`, `Maestro`, and `Mastercard` and then verify the card number, just by looking at the digits      |\n| Card CVV        | CVV validation by default test for a numeric string of 4 characters in length. The `maxLength` can be overridden based on card number. The length will be changed 3 to 4 in the case of an American Express card which expects a 4 digit.                                                                                        |\n| Card Date       | Card month accepts 1 or 2 digit months. `1`, `01`, `10` are valid month. Year accepts 2 digit only. `21`, `22` is valid year. The maxElapsedYear parameter determines how many years in the future a card's expiration date should be considered valid. It has a default value of 19, so cards with an expiration date 20 or more years in the future would not be considered valid. It can be overridden by passing in an integer as a second argument.          |\n\n## Browser Support\n\n| ![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png) | ![Safari](https://raw.github.com/alrra/browser-logos/master/src/safari/safari_48x48.png) | ![Opera](https://raw.github.com/alrra/browser-logos/master/src/opera/opera_48x48.png) | ![Edge](https://raw.github.com/alrra/browser-logos/master/src/edge/edge_48x48.png) | \n| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | \n| Latest ✔                                                                                 | Latest ✔                                                                                    | Latest ✔                                                                                 | Latest ✔                                                                              | Latest ✔                                                                                                                                                                                                    |\n## [Report a bug](https://github.com/asoftwareworld/asw-credit-card-validator/issues)\nWe use GitHub Issues as the official bug tracker for the ASW Credit Card Validator. Here are some advices for our users that want to report an issue:\n\n1. Make sure that you are using the latest version of the ASW Credit Card Validator.\n2. Providing us reproducible steps for the issue will shorten the time it takes for it to be fixed.\n3. Some issues may be browser specific, so specifying in what browser you encountered the issue might help.\n\n## Technical Support or Questions\nIf you have questions or need help please email `asoftwareworld@gmail.com`\n\n## License\n[MIT](https://github.com/asoftwareworld/asw-credit-card-validator/blob/main/LICENSE)\n\n## Social Media\n\nTwitter: \u003chttps://twitter.com/asoftwareworld\u003e\n\nLinkedIn: \u003chttps://in.linkedin.com/company/asoftwareworld\u003e\n\nYoutube: \u003chttps://www.youtube.com/@asoftwareworld\u003e\n\nFacebook: \u003chttps://www.facebook.com/asoftwaresworld\u003e\n\n## Donate\n\u003ca href=\"https://paypal.me/asoftwareworld?locale.x=en_GB\"\u003e\u003cimg src=\"blue.svg\" height=\"40\"\u003e\u003c/a\u003e  \nIf you found value in `ASW Credit Card Validator` or a contributor helped you out of a jam, consider becoming a contributor yourself.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasoftwareworld%2Fasw-credit-card-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasoftwareworld%2Fasw-credit-card-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasoftwareworld%2Fasw-credit-card-validator/lists"}