Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

added Capital Bank of Jordan cards #276

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
MAFiA303 wants to merge 1 commit into binlist:master
base: master
Choose a base branch
Loading
from MAFiA303:CapitalBankojJordan_fixes

Conversation

@MAFiA303
Copy link

@MAFiA303 MAFiA303 commented Feb 24, 2022

fixes

Copy link

@Horlabrainmoore Horlabrainmoore left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

credit_validator/
├── app/
│ ├── core/
│ │ ├── luhn.py
│ │ ├── brand.py
│ │ └── validator.py
│ ├── api/
│ │ └── routes.py
│ └── main.py
├── tests/
│ └── test_validator.py
├── .github/
│ └── workflows/
│ └── ci.yml
├── Dockerfile
├── pyproject.toml

import zipfile
import os

Define file structure

base_dir = "/mnt/data/credit_validator"
structure = {
"app/core": {
"luhn.py": """
def luhn_check(card_number: str) -> bool:
digits = [int(d) for d in card_number if d.isdigit()]
checksum = 0
double = False
for d in reversed(digits):
if double:
d *= 2
if d > 9:
d -= 9
checksum += d
double = not double
return checksum % 10 == 0
""",
"brand.py": """
import re

def detect_brand(card_number: str) -> str:
patterns = {
"Visa": r"^4[0-9]{12}(?:[0-9]{3})?$",
"MasterCard": r"^5[1-5][0-9]{14}$",
"Amex": r"^3[47][0-9]{13}$",
"Discover": r"^6(?:011|5[0-9]{2})[0-9]{12}$"
}
for brand, pattern in patterns.items():
if re.match(pattern, card_number):
return brand
return "Unknown"
""",
"validator.py": """
from app.core.luhn import luhn_check
from app.core.brand import detect_brand

def validate_card(card_number: str) -> dict:
sanitized = "".join(filter(str.isdigit, card_number))
is_valid = luhn_check(sanitized)
brand = detect_brand(sanitized)
return {
"is_valid": is_valid,
"brand": brand,
"message": (
"Card is valid and recognized."
if is_valid and brand != "Unknown"
else "Card is invalid or unrecognized."
)
}
"""
},
"app/api": {
"routes.py": """
from fastapi import APIRouter
from pydantic import BaseModel
from app.core.validator import validate_card

router = APIRouter()

class CardInput(BaseModel):
card_number: str

@router.post("/validate")
async def validate(input: CardInput):
return validate_card(input.card_number)
"""
},
"app": {
"main.py": """
from fastapi import FastAPI
from app.api.routes import router

app = FastAPI(title="Credit Card Validator API")
app.include_router(router)
"""
},
"tests": {
"test_validator.py": """
from app.core.validator import validate_card

def test_valid_visa():
result = validate_card("4111111111111111")
assert result["is_valid"]
assert result["brand"] == "Visa"

def test_invalid_card():
result = validate_card("1234567812345670")
assert not result["is_valid"]
"""
},
".github/workflows": {
"ci.yml": """
name: CI

on: [push, pull_request]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install fastapi uvicorn pytest
- name: Run tests
run: |
pytest tests
"""
},
"": {
"Dockerfile": """
FROM python:3.11-slim

WORKDIR /app

COPY . .
RUN pip install --no-cache-dir fastapi uvicorn

EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
""",
"pyproject.toml": """
[tool.poetry]
name = "credit-validator"
version = "0.1.0"
description = "Credit card validation API"
authors = ["Captain Horla Brain"]

[tool.poetry.dependencies]
python = "^3.11"
fastapi = "^0.110.0"
uvicorn = "^0.29.0"

[tool.poetry.dev-dependencies]
pytest = "^8.1.0"
"""
}
}

Create files

for folder, files in structure.items():
folder_path = os.path.join(base_dir, folder)
os.makedirs(folder_path, exist_ok=True)
for filename, content in files.items():
with open(os.path.join(folder_path, filename), "w") as f:
f.write(content.strip())

Create zip file

zip_path = "/mnt/data/credit_validator_boilerplate.zip"
with zipfile.ZipFile(zip_path, 'w') as zipf:
for root, _, files in os.walk(base_dir):
for file in files:
full_path = os.path.join(root, file)
arcname = os.path.relpath(full_path, base_dir)
zipf.write(full_path, arcname)

zip_path

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

1 more reviewer

@Horlabrainmoore Horlabrainmoore Horlabrainmoore approved these changes

Reviewers whose approvals may not affect merge requirements

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /