< Summary

Information
Class: Utility.Components.LuhnChecker.LuhnChecker
Assembly: Utility
File(s): /home/runner/work/Utility-Blazor/Utility-Blazor/src/Utility/Components/LuhnChecker/LuhnChecker.razor
Tag: 231_14069517506
Line coverage
85%
Covered lines: 17
Uncovered lines: 3
Coverable lines: 20
Total lines: 89
Line coverage: 85%
Branch coverage
75%
Covered branches: 6
Total branches: 8
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_check()100%11100%
get_valid()100%11100%
OnInitializedAsync()100%11100%
CheckSingle()100%11100%
ClearSingle()100%210%
LuhnCheck(...)75%88100%

File(s)

/home/runner/work/Utility-Blazor/Utility-Blazor/src/Utility/Components/LuhnChecker/LuhnChecker.razor

#LineLine coverage
 1@using System.Linq;
 2
 3<div class="container">
 4    <div class="row">
 5        <div class="col">
 6            <div class="input-group">
 7                <input id="luhnCheck" name="luhnCheck" class="form-control" @bind="check" placeholder="378282246310005" 
 8                <span class="input-group-btn">
 9                    <button id="btnLuhnCheckClear" name="btnLuhnCheckClear" class="btn btn-danger float-right" @onclick=
 10                </span>
 11            </div>
 12        </div>
 13    </div>
 14    <div class="row">
 15        <div class="col">
 16            <button id="btnLuhnCheck" name="btnLuhnCheck" class="btn btn-success float-right" @onclick="CheckSingle">Che
 17        </div>
 18    </div>
 19    <div class="row">
 20        <div class="col">
 21            <label class="label-control">Valid?</label>
 22            <label class="label-control" id="luhnCheckLabel">@valid.ToString()</label>
 23        </div>
 24    </div>
 25    @*<div class="row">
 26        <textarea id="luhnChecks" class="form-control" @bind="checks"></textarea>
 27    </div>
 28    <div class="row">
 29        <button id="btnLuhnChecks" name="btnLuhnChecks" class="btn btn-success float-right"
 30                @onclick="CheckMultiple">
 31            Check
 32        </button>
 33        <button id="btnLuhnChecksClear" name="btnLuhnChecksClear" class="btn btn-danger float-right"
 34                @onclick="ClearMultiple">
 35            <i class="far fa-trash-alt"></i>
 36        </button>
 37    </div>*@
 38</div>
 39
 40@code {
 41
 42    [Parameter]
 1243    public string check  { get; set; }
 44
 45    [Parameter]
 1246    public bool valid  { get; set; }
 47    //string checks;
 48
 49    protected override async Task OnInitializedAsync()
 250    {
 51        // check = "378282246310005"; //string.Empty;
 252        valid = false;
 53        // valid = LuhnCheck(check);
 54        //checks = "b"; //string.Empty;
 255    }
 56
 57    private void CheckSingle()
 258    {
 259        valid = LuhnCheck(check);
 260    }
 61
 62    private void ClearSingle()
 063    {
 064        check = string.Empty;
 065    }
 66
 67    @*private void CheckMultiple()
 68    {
 69        var valid = LuhnCheck(check);
 70    }
 71
 72    private void ClearMultiple()
 73    {
 74        checks = string.Empty;
 75    }*@
 76
 77    // https://stackoverflow.com/a/40491537
 78    private static bool LuhnCheck(string digits)
 279    {
 280        if (string.IsNullOrEmpty(digits)) return false;
 81
 282        return digits.All(char.IsDigit) && digits.Reverse()
 1683            .Select(c => c - 48)
 1684            .Select((thisNum, i) => i % 2 == 0
 1685                ? thisNum
 1686                : ((thisNum *= 2) > 9 ? thisNum - 9 : thisNum)
 287            ).Sum() % 10 == 0;
 288    }
 89}