ClearAll[CanonicalizeCIDR] CanonicalizeCIDR[str_String] := Module[{i, ip, chop, keep, change}, If[StringMatchQ[str, "*.*.*.*/*"], i = StringSplit[str, "." | "/"]; i = Interpreter["Integer"] /@ i; If[MatchQ[i, {_Integer, _Integer, _Integer, _Integer, _Integer}], If[AllTrue[i, Between[{0, 255}]], {ip, {chop}} = TakeDrop[i, 4]; ip = Catenate[IntegerDigits[ip, 2, 8]]; {keep, change} = TakeDrop[ip, chop]; change = ConstantArray[0, Length[change]]; ip = Partition[Join[keep, change], 8]; ip = ToString[FromDigits[#, 2]] & /@ ip; StringRiffle[ip, "."] <> "/" <> ToString[chop] , Failure["Invalid range of numbers", <|"Input" -> str|>] ] , Failure["Invalid format", <|"Input" -> str|>] ] ] ] CanonicalizeCIDR["87.70.141.1/22"] CanonicalizeCIDR["36.18.154.103/12"] CanonicalizeCIDR["62.62.197.11/29"] CanonicalizeCIDR["67.137.119.181/4"] CanonicalizeCIDR["161.214.74.21/24"] CanonicalizeCIDR["184.232.176.184/18"]