Created
June 5, 2022 09:39
-
-
Save AlphaBs/7132e7f84cb579c24cf97f9b942ccd81 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Text.RegularExpressions; | |
// $('input[name="service_code"]').val() | |
string _d(string r) | |
{ | |
int a, e, n, t, f, d, h; | |
string i = "yL/M=zNa0bcPQdReSfTgUhViWjXkYIZmnpo+qArOBslCt2D3uE4Fv5G6wH178xJ9K"; | |
string o = ""; | |
int c = 0; | |
r = Regex.Replace(r, @"[^A-Za-z0-9+/=]", ""); | |
for (; c < r.Length;) | |
{ | |
t = i.IndexOf(r[c++]); | |
f = i.IndexOf(r[c++]); | |
d = i.IndexOf(r[c++]); | |
h = i.IndexOf(r[c++]); | |
a = t << 2 | f >> 4; | |
e = (15 & f) << 4 | d >> 2; | |
n = (3 & d) << 6 | h; | |
o += (char)a; | |
if (64 != d) o += (char)e; | |
if (64 != h) o += (char)n; | |
} | |
return o; | |
} | |
string _f(string r, string _r) | |
{ | |
var _rs = _r.Split(','); | |
var c = ""; | |
for (int n = 0; n < _rs.Length; n++) | |
{ | |
var tc = (2 * (float.Parse(_rs[n]) - n - 1) / (13 - n - 1)); | |
c += (char)tc; | |
} | |
return Regex.Replace(r, @"(.{10})$", c); | |
} | |
string convert_r(string tvl) | |
{ | |
var charArr = tvl.ToCharArray(); | |
var fi = tvl[0] - '0'; | |
fi = fi > 5 ? fi - 5 : fi + 4; | |
charArr[0] = (char)(fi + '0'); | |
return new string(charArr); | |
} | |
string convertServiceCode(string serviceCode, string rRaw) | |
{ | |
var _r = _d(rRaw); | |
_r = convert_r(_r); | |
return _f(serviceCode, _r); | |
} | |
var testcases = new[] | |
{ | |
new ServiceCodeTestCase | |
{ | |
R = "QgnHPM0HQ4w5PM05R/u4dMYtQ+0HPM=6d4w5PMQEQ4uEQ+ntQg0FPMnFP+UK", | |
InputServiceCode = "21ac6d96ad152e8f15a05b7350a2475909d19bcedeba9d4face8115e9bc1fa4e69723ec5ce0bf0b1105e9ea3edaaf17e527fd210ecee3a7073209b578a56acb19e62d070492b9639fe2fd4d616f4fa0ec1aa47e651836a74cd0c1b3d0eb6484496238f01f4db97d8e801ac3e878a1c25233d6089936119bf33db1086914531ab77050029d1cdfbe327b8409f175f684612954bebde386fd9999e19a64f0f69a7607cbb0a072e6a4785c04de95eca4939e2f3ba1a5f8483570a515b7e5601bc6ca0fdcb6ec30399ac48a1b33f81f091", | |
ExpectedServiceCode = "21ac6d96ad152e8f15a05b7350a2475909d19bcedeba9d4face8115e9bc1fa4e69723ec5ce0bf0b1105e9ea3edaaf17e527fd210ecee3a7073209b578a56acb19e62d070492b9639fe2fd4d616f4fa0ec1aa47e651836a74cd0c1b3d0eb6484496238f01f4db97d8e801ac3e878a1c25233d6089936119bf33db1086914531ab77050029d1cdfbe327b8409f175f684612954bebde386fd9999e19a64f0f69a7607cbb0a072e6a4785c04de95eca4939e2f3ba1a5f8483570a515b7e5601bc6ca0fdcb6ec30399ac48a1b53681f091" | |
}, | |
new ServiceCodeTestCase | |
{ | |
R = "QgnHPMQEdTw5PM0vR/u4Q+ytdMy5PM=wR/uEdgStQgQuP+UtQ+yHPM=5dTw5", | |
InputServiceCode = "21ac6d96ad152e8f15a05b7350a2475909d19bcedeba9d4face8115e9bc1fa4e6e7a3dcac30cf0b1105e9ea3edaaf17e98126fc2f6a38e55e7d8d3827b417a0c3b34e3b8c1a5e426e39ad97e7a9a3855469435c07415a913e087412a64ff0286a18dcadf4edf8c99342f71e55465cc9cc21436f1bf11d13988b17476a4d9c8d43b1569a87ff77fe671917256da7667c1332adc9143d0e742789e0d0af777711f0c603f82fab577650ddd8cef65d1b092be3d40817e391f36650f38ab9d801dccdabe18d411da", | |
ExpectedServiceCode = "21ac6d96ad152e8f15a05b7350a2475909d19bcedeba9d4face8115e9bc1fa4e6e7a3dcac30cf0b1105e9ea3edaaf17e98126fc2f6a38e55e7d8d3827b417a0c3b34e3b8c1a5e426e39ad97e7a9a3855469435c07415a913e087412a64ff0286a18dcadf4edf8c99342f71e55465cc9cc21436f1bf11d13988b17476a4d9c8d43b1569a87ff77fe671917256da7667c1332adc9143d0e742789e0d0af777711f0c603f82fab577650ddd8cef65d1b092be3d40817e391f36650f38ab9d801dccdab910d411da" | |
} | |
}; | |
foreach (var tc in testcases) | |
{ | |
Console.WriteLine(tc.InputServiceCode); | |
var result = convertServiceCode(tc.InputServiceCode, tc.R); | |
Console.WriteLine(result); | |
if (result == tc.ExpectedServiceCode) | |
{ | |
Console.WriteLine("PASS\n"); | |
} | |
else | |
{ | |
Console.WriteLine("FAIL\n"); | |
} | |
} | |
class ServiceCodeTestCase | |
{ | |
public string? R { get; set; } | |
public string? InputServiceCode { get; set; } | |
public string? ExpectedServiceCode { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment