Advertisement
fortsoft

IsbnIssn

Sep 1st, 2020 (edited)
1,361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 46.36 KB | None | 0 0
  1. /**
  2.  * This library is open source software licensed under terms of the MIT License.
  3.  *
  4.  * Copyright (c) 2012-2021 Petr Červinka - FortSoft <[email protected]>
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  7.  * of this software and associated documentation files (the "Software"), to deal
  8.  * in the Software without restriction, including without limitation the rights
  9.  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10.  * copies of the Software, and to permit persons to whom the Software is
  11.  * furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included in all
  14.  * copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  22.  * SOFTWARE.
  23.  **
  24.  * Version 1.0.0.0
  25.  */
  26.  
  27. using System;
  28. using System.Text;
  29. using System.Text.RegularExpressions;
  30.  
  31. namespace FortSoft.Tools {
  32.     public static class IsbnIssn {
  33.         public static bool TestIsbnStrict(string isbn) {
  34.             if (!Regex.IsMatch(isbn, @"^ISBN\s(\d+-\d+-\d+-(\d|X)|\d+\s\d+\s\d+\s(\d|X))$") && !Regex.IsMatch(isbn, @"^ISBN\s(\d{3}-\d+-\d+-\d+-\d|\d{3}\s\d+\s\d+\s\d+\s\d)$")) {
  35.                 return false;
  36.             }
  37.             return TestRawIsbn(RawIsbn(isbn));
  38.         }
  39.  
  40.         public static bool TestIsbnBasic(string isbn) {
  41.             return TestRawIsbn(RawIsbn(isbn));
  42.         }
  43.  
  44.         public static bool TestRawIsbn(string isbn) {
  45.             int n = 0;
  46.             if (isbn.Length == 10) {
  47.                 for (int i = 0; i < 10; i++) {
  48.                     n += (isbn[i] == 'X' ? 10 : int.Parse(isbn[i].ToString())) * (10 - i);
  49.                 }
  50.                 return n % 11 == 0;
  51.             } else if (isbn.Length == 13) {
  52.                 for (int i = 0; i < 13; i++) {
  53.                     n += int.Parse(isbn[i].ToString()) * (i % 2 == 0 ? 1 : 3);
  54.                 }
  55.                 return n % 10 == 0;
  56.             } else {
  57.                 return false;
  58.             }
  59.         }
  60.  
  61.         public static string RawIsbn(string isbn) {
  62.             if (!Regex.IsMatch(isbn, @"^\s*(ISBN\s+)?(\d{3}(-|\s+)?)?\d+(-|\s+)?\d+(-|\s+)?\d+(-|\s+)?(\d|X)\s*$", RegexOptions.IgnoreCase)) {
  63.                 throw new FormatException("Invalid ISBN.");
  64.             }
  65.             Regex regex = new Regex(@"^\s*(ISBN\s+)?((\d{3})(-|\s+)?)?(\d+)(-|\s+)?(\d+)(-|\s+)?(\d+)(-|\s+)?(\d|X)\s*$", RegexOptions.IgnoreCase);
  66.             isbn = regex.Replace(isbn, "$3$5$7$9$11");
  67.             if (isbn.Length != 10 && isbn.Length != 13) {
  68.                 throw new FormatException("Invalid ISBN.");
  69.             }
  70.             return isbn.ToUpper();
  71.         }
  72.  
  73.         public static string FormatIsbn(string isbn, bool isbnPrefix) {
  74.             isbn = RawIsbn(isbn);
  75.             string n = isbn;
  76.             string p = null;
  77.             if (n.Length == 13) {
  78.                 p = n.Substring(0, 3);
  79.                 n = n.Substring(3);
  80.             }
  81.             string c = n.Substring(n.Length - 1).ToUpper();
  82.             n = n.Substring(0, n.Length - 1);
  83.  
  84.             int l1 = 0;
  85.             int n0 = int.Parse(n.Substring(0, 1));
  86.             if (n0 <= 5 || n0 == 7) {
  87.                 l1 = 1;
  88.             } else if (n0 == 8) {
  89.                 l1 = 2;
  90.             } else if (n0 == 9) {
  91.                 int n1 = int.Parse(n.Substring(1, 1));
  92.                 if (n1 <= 2) {
  93.                     l1 = 2;
  94.                 } else if (n1 <= 8) {
  95.                     l1 = 3;
  96.                 } else if (n1 == 9) {
  97.                     int n2 = int.Parse(n.Substring(2, 1));
  98.                     if (n2 >= 4 && n2 <= 8) {
  99.                         l1 = 4;
  100.                     } else if (n2 == 9) {
  101.                         l1 = 5;
  102.                     }
  103.                 }
  104.             }
  105.             if (l1 == 0) {
  106.                 throw new NotImplementedException("Not defined.");
  107.             }
  108.             string g1 = n.Substring(0, l1);
  109.             n = n.Substring(l1);
  110.  
  111.             int l2 = 0;
  112.             int g = int.Parse(g1);
  113.             int v = int.Parse(n);
  114.             if (g == 0) {
  115.                 if (v < 20000000) {
  116.                     l2 = 2;
  117.                 } else if (v < 70000000) {
  118.                     l2 = 3;
  119.                 } else if (v < 85000000) {
  120.                     l2 = 4;
  121.                 } else if (v < 90000000) {
  122.                     l2 = 5;
  123.                 } else if (v < 95000000) {
  124.                     l2 = 6;
  125.                 } else {
  126.                     l2 = 7;
  127.                 }
  128.             } else if (g == 1) {
  129.                 if (v < 10000000) {
  130.                     l2 = 2;
  131.                 } else if (v < 40000000) {
  132.                     l2 = 3;
  133.                 } else if (v < 55000000) {
  134.                     l2 = 4;
  135.                 } else if (v < 86980000) {
  136.                     l2 = 5;
  137.                 } else {
  138.                     l2 = 6;
  139.                 }
  140.             } else if (g == 2) {
  141.                 if (v < 20000000) {
  142.                     l2 = 2;
  143.                 } else if (v < 35000000) {
  144.                     l2 = 4;
  145.                 } else if (v < 40000000) {
  146.                     l2 = 2;
  147.                 } else if (v < 70000000) {
  148.                     l2 = 3;
  149.                 } else if (v < 84000000) {
  150.                     l2 = 4;
  151.                 } else if (v < 90000000) {
  152.                     l2 = 5;
  153.                 } else if (v < 95000000) {
  154.                     l2 = 6;
  155.                 } else {
  156.                     l2 = 7;
  157.                 }
  158.             } else if (g == 3) {
  159.                 if (v < 3000000) {
  160.                     l2 = 2;
  161.                 } else if (v < 3400000) {
  162.                     l2 = 3;
  163.                 } else if (v < 3700000) {
  164.                     l2 = 4;
  165.                 } else if (v < 4000000) {
  166.                     l2 = 1;
  167.                 } else if (v < 20000000) {
  168.                     l2 = 2;
  169.                 } else if (v < 70000000) {
  170.                     l2 = 3;
  171.                 } else if (v < 85000000) {
  172.                     l2 = 4;
  173.                 } else if (v < 90000000) {
  174.                     l2 = 5;
  175.                 } else if (v < 95000000) {
  176.                     l2 = 6;
  177.                 } else {
  178.                     l2 = 7;
  179.                 }
  180.             } else if (g == 4) {
  181.                 if (v < 20000000) {
  182.                     l2 = 2;
  183.                 } else if (v < 70000000) {
  184.                     l2 = 3;
  185.                 } else if (v < 85000000) {
  186.                     l2 = 4;
  187.                 } else if (v < 90000000) {
  188.                     l2 = 5;
  189.                 } else if (v < 95000000) {
  190.                     l2 = 6;
  191.                 } else {
  192.                     l2 = 7;
  193.                 }
  194.             } else if (g == 5) {
  195.                 if (v < 20000000) {
  196.                     l2 = 2;
  197.                 } else if (v < 70000000) {
  198.                     l2 = 3;
  199.                 } else if (v < 85000000) {
  200.                     l2 = 4;
  201.                 } else if (v < 90000000) {
  202.                     l2 = 5;
  203.                 } else if (v < 91000000) {
  204.                     l2 = 4;
  205.                 } else if (v < 92000000) {
  206.                     l2 = 3;
  207.                 } else if (v < 93000000) {
  208.                     l2 = 4;
  209.                 } else if (v < 95000000) {
  210.                     l2 = 3;
  211.                 } else if (v < 98000000) {
  212.                     l2 = 4;
  213.                 } else if (v < 99000000) {
  214.                     l2 = 6;
  215.                 } else if (v < 99100000) {
  216.                     l2 = 3;
  217.                 } else {
  218.                     l2 = 4;
  219.                 }
  220.             } else if (g == 600) {
  221.                 if (v < 100000) {
  222.                     l2 = 2;
  223.                 } else if (v < 500000) {
  224.                     l2 = 3;
  225.                 } else if (v < 900000) {
  226.                     l2 = 4;
  227.                 } else {
  228.                     l2 = 5;
  229.                 }
  230.             } else if (g == 601) {
  231.                 if (v < 200000) {
  232.                     l2 = 2;
  233.                 } else if (v < 700000) {
  234.                     l2 = 3;
  235.                 } else if (v < 800000) {
  236.                     l2 = 4;
  237.                 } else if (v < 850000) {
  238.                     l2 = 1;
  239.                 } else {
  240.                     l2 = 2;
  241.                 }
  242.             } else if (g == 602) {
  243.                 if (v < 200000) {
  244.                     l2 = 2;
  245.                 } else if (v < 800000) {
  246.                     l2 = 3;
  247.                 } else if (v < 950000) {
  248.                     l2 = 4;
  249.                 } else {
  250.                     l2 = 5;
  251.                 }
  252.             } else if (g == 7) {
  253.                 if (v < 10000000) {
  254.                     l2 = 2;
  255.                 } else if (v < 50000000) {
  256.                     l2 = 3;
  257.                 } else if (v < 80000000) {
  258.                     l2 = 4;
  259.                 } else if (v < 90000000) {
  260.                     l2 = 5;
  261.                 } else {
  262.                     l2 = 6;
  263.                 }
  264.             } else if (g == 80) {
  265.                 if (v < 2000000) {
  266.                     l2 = 2;
  267.                 } else if (v < 7000000) {
  268.                     l2 = 3;
  269.                 } else if (v < 8500000) {
  270.                     l2 = 4;
  271.                 } else if (v < 9000000) {
  272.                     l2 = 5;
  273.                 } else {
  274.                     l2 = 6;
  275.                 }
  276.             } else if (g == 81) {
  277.                 if (v < 2000000) {
  278.                     l2 = 2;
  279.                 } else if (v < 7000000) {
  280.                     l2 = 3;
  281.                 } else if (v < 8500000) {
  282.                     l2 = 4;
  283.                 } else if (v < 9000000) {
  284.                     l2 = 5;
  285.                 } else {
  286.                     l2 = 6;
  287.                 }
  288.             } else if (g == 82) {
  289.                 if (v < 2000000) {
  290.                     l2 = 2;
  291.                 } else if (v < 7000000) {
  292.                     l2 = 3;
  293.                 } else if (v < 9000000) {
  294.                     l2 = 4;
  295.                 } else if (v < 9900000) {
  296.                     l2 = 5;
  297.                 } else {
  298.                     l2 = 6;
  299.                 }
  300.             } else if (g == 83) {
  301.                 if (v < 2000000) {
  302.                     l2 = 2;
  303.                 } else if (v < 6000000) {
  304.                     l2 = 4;
  305.                 } else if (v < 7000000) {
  306.                     l2 = 3;
  307.                 } else if (v < 8500000) {
  308.                     l2 = 4;
  309.                 } else if (v < 9000000) {
  310.                     l2 = 5;
  311.                 } else {
  312.                     l2 = 6;
  313.                 }
  314.             } else if (g == 84) {
  315.                 if (v < 2000000) {
  316.                     l2 = 2;
  317.                 } else if (v < 7000000) {
  318.                     l2 = 3;
  319.                 } else if (v < 8500000) {
  320.                     l2 = 4;
  321.                 } else if (v < 9000000) {
  322.                     l2 = 3;
  323.                 } else if (v < 9200000) {
  324.                     l2 = 5;
  325.                 } else if (v < 9240000) {
  326.                     l2 = 4;
  327.                 } else if (v < 9300000) {
  328.                     l2 = 5;
  329.                 } else if (v < 9500000) {
  330.                     l2 = 4;
  331.                 } else if (v < 9700000) {
  332.                     l2 = 3;
  333.                 } else {
  334.                     l2 = 4;
  335.                 }
  336.             } else if (g == 85) {
  337.                 if (v < 2000000) {
  338.                     l2 = 2;
  339.                 } else if (v < 6000000) {
  340.                     l2 = 4;
  341.                 } else if (v < 7000000) {
  342.                     l2 = 3;
  343.                 } else if (v < 8500000) {
  344.                     l2 = 4;
  345.                 } else if (v < 9000000) {
  346.                     l2 = 5;
  347.                 } else if (v < 9800000) {
  348.                     l2 = 4;
  349.                 } else {
  350.                     l2 = 5;
  351.                 }
  352.             } else if (g == 86) {
  353.                 if (v < 3000000) {
  354.                     l2 = 2;
  355.                 } else if (v < 6000000) {
  356.                     l2 = 3;
  357.                 } else if (v < 8000000) {
  358.                     l2 = 4;
  359.                 } else if (v < 9000000) {
  360.                     l2 = 5;
  361.                 } else {
  362.                     l2 = 6;
  363.                 }
  364.             } else if (g == 87) {
  365.                 if (v < 3010000) {
  366.                     l2 = 2;
  367.                 } else if (v < 6901000) {
  368.                     l2 = 3;
  369.                 } else if (v < 8400100) {
  370.                     l2 = 4;
  371.                 } else if (v < 9600010) {
  372.                     l2 = 5;
  373.                 } else {
  374.                     l2 = 6;
  375.                 }
  376.             } else if (g == 88) {
  377.                 if (v < 2000000) {
  378.                     l2 = 2;
  379.                 } else if (v < 6000000) {
  380.                     l2 = 3;
  381.                 } else if (v < 8500000) {
  382.                     l2 = 4;
  383.                 } else if (v < 9000000) {
  384.                     l2 = 5;
  385.                 } else if (v < 9500000) {
  386.                     l2 = 4;
  387.                 } else {
  388.                     l2 = 5;
  389.                 }
  390.             } else if (g == 89) {
  391.                 if (v < 2500000) {
  392.                     l2 = 2;
  393.                 } else if (v < 5500000) {
  394.                     l2 = 3;
  395.                 } else if (v < 8500000) {
  396.                     l2 = 4;
  397.                 } else if (v < 9500000) {
  398.                     l2 = 5;
  399.                 } else {
  400.                     l2 = 6;
  401.                 }
  402.             } else if (g == 90) {
  403.                 if (v < 2000000) {
  404.                     l2 = 2;
  405.                 } else if (v < 5000000) {
  406.                     l2 = 3;
  407.                 } else if (v < 7000000) {
  408.                     l2 = 4;
  409.                 } else if (v < 8000000) {
  410.                     l2 = 5;
  411.                 } else if (v < 8500000) {
  412.                     l2 = 3;
  413.                 } else if (v < 9000000) {
  414.                     l2 = 5;
  415.                 } else {
  416.                     l2 = 6;
  417.                 }
  418.             } else if (g == 91) {
  419.                 if (v < 2000000) {
  420.                     l2 = 1;
  421.                 } else if (v < 5000000) {
  422.                     l2 = 2;
  423.                 } else if (v < 6901000) {
  424.                     l2 = 3;
  425.                 } else if (v < 8400100) {
  426.                     l2 = 4;
  427.                 } else if (v < 9600010) {
  428.                     l2 = 5;
  429.                 } else {
  430.                     l2 = 6;
  431.                 }
  432.             } else if (g == 92) {
  433.                 if (v < 6000000) {
  434.                     l2 = 1;
  435.                 } else if (v < 8000000) {
  436.                     l2 = 2;
  437.                 } else if (v < 9000000) {
  438.                     l2 = 3;
  439.                 } else if (v < 9500000) {
  440.                     l2 = 4;
  441.                 } else if (v < 9900000) {
  442.                     l2 = 5;
  443.                 } else {
  444.                     l2 = 6;
  445.                 }
  446.             } else if (g == 950) {
  447.                 if (v < 500000) {
  448.                     l2 = 2;
  449.                 } else if (v < 900000) {
  450.                     l2 = 3;
  451.                 } else if (v < 990000) {
  452.                     l2 = 4;
  453.                 } else {
  454.                     l2 = 5;
  455.                 }
  456.             } else if (g == 951) {
  457.                 if (v < 200000) {
  458.                     l2 = 1;
  459.                 } else if (v < 550000) {
  460.                     l2 = 2;
  461.                 } else if (v < 890000) {
  462.                     l2 = 3;
  463.                 } else if (v < 950000) {
  464.                     l2 = 4;
  465.                 } else {
  466.                     l2 = 5;
  467.                 }
  468.             } else if (g == 952) {
  469.                 if (v < 200000) {
  470.                     l2 = 2;
  471.                 } else if (v < 500000) {
  472.                     l2 = 3;
  473.                 } else if (v < 600000) {
  474.                     l2 = 1;
  475.                 } else if (v < 660000) {
  476.                     l2 = 3;
  477.                 } else if (v < 670000) {
  478.                     l2 = 4;
  479.                 } else if (v < 700000) {
  480.                     l2 = 3;
  481.                 } else if (v < 800000) {
  482.                     l2 = 1;
  483.                 } else if (v < 950000) {
  484.                     l2 = 3;
  485.                 } else if (v < 990000) {
  486.                     l2 = 4;
  487.                 } else {
  488.                     l2 = 5;
  489.                 }
  490.             } else if (g == 953) {
  491.                 if (v < 100000) {
  492.                     l2 = 1;
  493.                 } else if (v < 150000) {
  494.                     l2 = 2;
  495.                 } else if (v < 550000) {
  496.                     l2 = 4;
  497.                 } else if (v < 600000) {
  498.                     l2 = 3;
  499.                 } else if (v < 950000) {
  500.                     l2 = 4;
  501.                 } else {
  502.                     l2 = 5;
  503.                 }
  504.             } else if (g == 954) {
  505.                 if (v < 300000) {
  506.                     l2 = 2;
  507.                 } else if (v < 800000) {
  508.                     l2 = 3;
  509.                 } else if (v < 900000) {
  510.                     l2 = 4;
  511.                 } else if (v < 930000) {
  512.                     l2 = 3;
  513.                 } else {
  514.                     l2 = 4;
  515.                 }
  516.             } else if (g == 955) {
  517.                 if (v < 100000) {
  518.                     l2 = 3;
  519.                 } else if (v < 200000) {
  520.                     l2 = 1;
  521.                 } else if (v < 550000) {
  522.                     l2 = 2;
  523.                 } else if (v < 800000) {
  524.                     l2 = 3;
  525.                 } else if (v < 950000) {
  526.                     l2 = 4;
  527.                 } else {
  528.                     l2 = 5;
  529.                 }
  530.             } else if (g == 956) {
  531.                 if (v < 200000) {
  532.                     l2 = 2;
  533.                 } else if (v < 700000) {
  534.                     l2 = 3;
  535.                 } else {
  536.                     l2 = 4;
  537.                 }
  538.             } else if (g == 957) {
  539.                 if (v < 200000) {
  540.                     l2 = 3;
  541.                 } else if (v < 210000) {
  542.                     l2 = 1;
  543.                 } else if (v < 280000) {
  544.                     l2 = 4;
  545.                 } else if (v < 310000) {
  546.                     l2 = 1;
  547.                 } else if (v < 440000) {
  548.                     l2 = 2;
  549.                 } else if (v < 820000) {
  550.                     l2 = 3;
  551.                 } else if (v < 970000) {
  552.                     l2 = 4;
  553.                 } else {
  554.                     l2 = 5;
  555.                 }
  556.             } else if (g == 958) {
  557.                 if (v < 600000) {
  558.                     l2 = 2;
  559.                 } else if (v < 800000) {
  560.                     l2 = 3;
  561.                 } else if (v < 950000) {
  562.                     l2 = 4;
  563.                 } else {
  564.                     l2 = 5;
  565.                 }
  566.             } else if (g == 959) {
  567.                 if (v < 200000) {
  568.                     l2 = 2;
  569.                 } else if (v < 700000) {
  570.                     l2 = 3;
  571.                 } else {
  572.                     l2 = 4;
  573.                 }
  574.             } else if (g == 960) {
  575.                 if (v < 200000) {
  576.                     l2 = 2;
  577.                 } else if (v < 660000) {
  578.                     l2 = 3;
  579.                 } else if (v < 690000) {
  580.                     l2 = 2;
  581.                 } else if (v < 700000) {
  582.                     l2 = 3;
  583.                 } else if (v < 850000) {
  584.                     l2 = 4;
  585.                 } else {
  586.                     l2 = 5;
  587.                 }
  588.             } else if (g == 961) {
  589.                 if (v < 200000) {
  590.                     l2 = 2;
  591.                 } else if (v < 600000) {
  592.                     l2 = 3;
  593.                 } else if (v < 900000) {
  594.                     l2 = 4;
  595.                 } else {
  596.                     l2 = 5;
  597.                 }
  598.             } else if (g == 962) {
  599.                 if (v < 200000) {
  600.                     l2 = 2;
  601.                 } else if (v < 700000) {
  602.                     l2 = 3;
  603.                 } else if (v < 850000) {
  604.                     l2 = 4;
  605.                 } else if (v < 870000) {
  606.                     l2 = 3;
  607.                 } else if (v < 900000) {
  608.                     l2 = 2;
  609.                 } else {
  610.                     l2 = 3;
  611.                 }
  612.             } else if (g == 963) {
  613.                 if (v < 200000) {
  614.                     l2 = 2;
  615.                 } else if (v < 700000) {
  616.                     l2 = 3;
  617.                 } else if (v < 850000) {
  618.                     l2 = 4;
  619.                 } else if (v < 900000) {
  620.                     l2 = 3;
  621.                 } else {
  622.                     l2 = 4;
  623.                 }
  624.             } else if (g == 964) {
  625.                 if (v < 150000) {
  626.                     l2 = 2;
  627.                 } else if (v < 250000) {
  628.                     l2 = 3;
  629.                 } else if (v < 300000) {
  630.                     l2 = 2;
  631.                 } else if (v < 550000) {
  632.                     l2 = 3;
  633.                 } else if (v < 900000) {
  634.                     l2 = 4;
  635.                 } else if (v < 970000) {
  636.                     l2 = 2;
  637.                 } else if (v < 990000) {
  638.                     l2 = 3;
  639.                 } else {
  640.                     l2 = 4;
  641.                 }
  642.             } else if (g == 965) {
  643.                 if (v < 200000) {
  644.                     l2 = 2;
  645.                 } else if (v < 690100) {
  646.                     l2 = 3;
  647.                 } else if (v < 890010) {
  648.                     l2 = 4;
  649.                 } else {
  650.                     l2 = 5;
  651.                 }
  652.             } else if (g == 966) {
  653.                 if (v < 200000) {
  654.                     l2 = 3;
  655.                 } else if (v < 300000) {
  656.                     l2 = 2;
  657.                 } else if (v < 700000) {
  658.                     l2 = 3;
  659.                 } else if (v < 900000) {
  660.                     l2 = 4;
  661.                 } else {
  662.                     l2 = 5;
  663.                 }
  664.             } else if (g == 967) {
  665.                 if (v < 300000) {
  666.                     l2 = 2;
  667.                 } else if (v < 500000) {
  668.                     l2 = 3;
  669.                 } else if (v < 600000) {
  670.                     l2 = 1;
  671.                 } else if (v < 900000) {
  672.                     l2 = 2;
  673.                 } else if (v < 990000) {
  674.                     l2 = 3;
  675.                 } else if (v < 999000) {
  676.                     l2 = 4;
  677.                 } else {
  678.                     l2 = 5;
  679.                 }
  680.             } else if (g == 968) {
  681.                 if (v < 10000) {
  682.                     l2 = 1;
  683.                 } else if (v < 400000) {
  684.                     l2 = 2;
  685.                 } else if (v < 500000) {
  686.                     l2 = 3;
  687.                 } else if (v < 800000) {
  688.                     l2 = 2;
  689.                 } else if (v < 900000) {
  690.                     l2 = 3;
  691.                 } else {
  692.                     l2 = 4;
  693.                 }
  694.             } else if (g == 969) {
  695.                 if (v < 200000) {
  696.                     l2 = 1;
  697.                 } else if (v < 400000) {
  698.                     l2 = 2;
  699.                 } else if (v < 800000) {
  700.                     l2 = 3;
  701.                 } else {
  702.                     l2 = 4;
  703.                 }
  704.             } else if (g == 971) {
  705.                 l2 = 3;
  706.             } else if (g == 972) {
  707.                 l2 = 1;
  708.             } else if (g == 974) {
  709.                 l2 = 2;
  710.             } else if (g == 975) {
  711.                 l2 = 5;
  712.             } else if (g == 976) {
  713.                 l2 = 1;
  714.             } else if (g == 977) {
  715.                 l2 = 2;
  716.             } else if (g == 978) {
  717.                 l2 = 3;
  718.             } else if (g == 980) {
  719.                 l2 = 2;
  720.             } else if (g == 989) {
  721.                 l2 = 1;
  722.             } else if (g == 9940) {
  723.                 if (v < 20000) {
  724.                     l2 = 1;
  725.                 } else if (v < 50000) {
  726.                     l2 = 2;
  727.                 } else if (v < 90000) {
  728.                     l2 = 3;
  729.                 } else {
  730.                     l2 = 4;
  731.                 }
  732.             } else if (g == 9941) {
  733.                 if (v < 10000) {
  734.                     l2 = 1;
  735.                 } else if (v < 40000) {
  736.                     l2 = 2;
  737.                 } else if (v < 90000) {
  738.                     l2 = 3;
  739.                 } else {
  740.                     l2 = 4;
  741.                 }
  742.             } else if (g == 9942) {
  743.                 if (v < 90000) {
  744.                     l2 = 2;
  745.                 } else {
  746.                     l2 = 3;
  747.                 }
  748.             } else if (g == 9943) {
  749.                 if (v < 30000) {
  750.                     l2 = 2;
  751.                 } else if (v < 40000) {
  752.                     l2 = 3;
  753.                 } else {
  754.                     l2 = 4;
  755.                 }
  756.             } else if (g == 9944) {
  757.                 if (v < 30000) {
  758.                     l2 = 2;
  759.                 } else if (v < 50000) {
  760.                     l2 = 3;
  761.                 } else if (v < 60000) {
  762.                     l2 = 1;
  763.                 } else if (v < 90000) {
  764.                     l2 = 2;
  765.                 } else {
  766.                     l2 = 3;
  767.                 }
  768.             } else if (g == 9945) {
  769.                 if (v < 40000) {
  770.                     l2 = 2;
  771.                 } else if (v < 57000) {
  772.                     l2 = 1;
  773.                 } else if (v < 58000) {
  774.                     l2 = 2;
  775.                 } else if (v < 85000) {
  776.                     l2 = 3;
  777.                 } else {
  778.                     l2 = 4;
  779.                 }
  780.             } else if (g == 9946) {
  781.                 if (v < 20000) {
  782.                     l2 = 1;
  783.                 } else if (v < 40000) {
  784.                     l2 = 2;
  785.                 } else if (v < 90000) {
  786.                     l2 = 3;
  787.                 } else {
  788.                     l2 = 4;
  789.                 }
  790.             } else if (g == 9947) {
  791.                 if (v < 20000) {
  792.                     l2 = 1;
  793.                 } else if (v < 80000) {
  794.                     l2 = 2;
  795.                 } else {
  796.                     l2 = 3;
  797.                 }
  798.             } else if (g == 9948) {
  799.                 if (v < 40000) {
  800.                     l2 = 2;
  801.                 } else if (v < 85000) {
  802.                     l2 = 3;
  803.                 } else {
  804.                     l2 = 4;
  805.                 }
  806.             } else if (g == 9949) {
  807.                 if (v < 10000) {
  808.                     l2 = 1;
  809.                 } else if (v < 40000) {
  810.                     l2 = 2;
  811.                 } else if (v < 90000) {
  812.                     l2 = 3;
  813.                 } else {
  814.                     l2 = 4;
  815.                 }
  816.             } else if (g == 9950) {
  817.                 if (v < 30000) {
  818.                     l2 = 2;
  819.                 } else if (v < 85000) {
  820.                     l2 = 3;
  821.                 } else {
  822.                     l2 = 4;
  823.                 }
  824.             } else if (g == 9951) {
  825.                 if (v < 40000) {
  826.                     l2 = 2;
  827.                 } else if (v < 85000) {
  828.                     l2 = 3;
  829.                 } else {
  830.                     l2 = 4;
  831.                 }
  832.             } else if (g == 9952) {
  833.                 if (v < 20000) {
  834.                     l2 = 1;
  835.                 } else if (v < 40000) {
  836.                     l2 = 2;
  837.                 } else if (v < 80000) {
  838.                     l2 = 3;
  839.                 } else {
  840.                     l2 = 4;
  841.                 }
  842.             } else if (g == 9953) {
  843.                 if (v < 10000) {
  844.                     l2 = 1;
  845.                 } else if (v < 40000) {
  846.                     l2 = 2;
  847.                 } else if (v < 60000) {
  848.                     l2 = 1;
  849.                 } else if (v < 90000) {
  850.                     l2 = 3;
  851.                 } else {
  852.                     l2 = 4;
  853.                 }
  854.             } else if (g == 9954) {
  855.                 if (v < 20000) {
  856.                     l2 = 1;
  857.                 } else if (v < 40000) {
  858.                     l2 = 2;
  859.                 } else if (v < 80000) {
  860.                     l2 = 3;
  861.                 } else {
  862.                     l2 = 4;
  863.                 }
  864.             } else if (g == 9955) {
  865.                 if (v < 40000) {
  866.                     l2 = 2;
  867.                 } else if (v < 93000) {
  868.                     l2 = 3;
  869.                 } else {
  870.                     l2 = 4;
  871.                 }
  872.             } else if (g == 9956) {
  873.                 if (v < 10000) {
  874.                     l2 = 1;
  875.                 } else if (v < 40000) {
  876.                     l2 = 2;
  877.                 } else if (v < 90000) {
  878.                     l2 = 3;
  879.                 } else {
  880.                     l2 = 4;
  881.                 }
  882.             } else if (g == 9957) {
  883.                 if (v < 40000) {
  884.                     l2 = 2;
  885.                 } else if (v < 70000) {
  886.                     l2 = 1;
  887.                 } else if (v < 85000) {
  888.                     l2 = 3;
  889.                 } else {
  890.                     l2 = 4;
  891.                 }
  892.             } else if (g == 9958) {
  893.                 if (v < 10000) {
  894.                     l2 = 1;
  895.                 } else if (v < 50000) {
  896.                     l2 = 2;
  897.                 } else if (v < 90000) {
  898.                     l2 = 3;
  899.                 } else {
  900.                     l2 = 4;
  901.                 }
  902.             } else if (g == 9959) {
  903.                 if (v < 20000) {
  904.                     l2 = 1;
  905.                 } else if (v < 80000) {
  906.                     l2 = 2;
  907.                 } else if (v < 95000) {
  908.                     l2 = 3;
  909.                 } else {
  910.                     l2 = 4;
  911.                 }
  912.             } else if (g == 9960) {
  913.                 if (v < 60000) {
  914.                     l2 = 2;
  915.                 } else if (v < 90000) {
  916.                     l2 = 3;
  917.                 } else {
  918.                     l2 = 4;
  919.                 }
  920.             } else if (g == 9961) {
  921.                 if (v < 30000) {
  922.                     l2 = 1;
  923.                 } else if (v < 70000) {
  924.                     l2 = 2;
  925.                 } else if (v < 95000) {
  926.                     l2 = 3;
  927.                 } else {
  928.                     l2 = 4;
  929.                 }
  930.             } else if (g == 9962) {
  931.                 if (v < 55000) {
  932.                     l2 = 3;
  933.                 } else if (v < 56000) {
  934.                     l2 = 1;
  935.                 } else if (v < 60000) {
  936.                     l2 = 2;
  937.                 } else if (v < 85000) {
  938.                     l2 = 3;
  939.                 } else {
  940.                     l2 = 4;
  941.                 }
  942.             } else if (g == 9963) {
  943.                 if (v < 30000) {
  944.                     l2 = 1;
  945.                 } else if (v < 55000) {
  946.                     l2 = 2;
  947.                 } else if (v < 75000) {
  948.                     l2 = 3;
  949.                 } else {
  950.                     l2 = 4;
  951.                 }
  952.             } else if (g == 9964) {
  953.                 if (v < 70000) {
  954.                     l2 = 1;
  955.                 } else if (v < 95000) {
  956.                     l2 = 2;
  957.                 } else {
  958.                     l2 = 3;
  959.                 }
  960.             } else if (g == 9965) {
  961.                 if (v < 40000) {
  962.                     l2 = 2;
  963.                 } else if (v < 90000) {
  964.                     l2 = 3;
  965.                 } else {
  966.                     l2 = 4;
  967.                 }
  968.             } else if (g == 9966) {
  969.                 if (v < 70000) {
  970.                     l2 = 3;
  971.                 } else if (v < 75000) {
  972.                     l2 = 2;
  973.                 } else if (v < 96000) {
  974.                     l2 = 3;
  975.                 } else {
  976.                     l2 = 4;
  977.                 }
  978.             } else if (g == 9967) {
  979.                 if (v < 40000) {
  980.                     l2 = 2;
  981.                 } else if (v < 90000) {
  982.                     l2 = 3;
  983.                 } else {
  984.                     l2 = 4;
  985.                 }
  986.             } else if (g == 9968) {
  987.                 if (v < 50000) {
  988.                     l2 = 2;
  989.                 } else if (v < 94000) {
  990.                     l2 = 3;
  991.                 } else {
  992.                     l2 = 4;
  993.                 }
  994.             } else if (g == 9970) {
  995.                 l2 = 2;
  996.             } else if (g == 9971) {
  997.                 l2 = 1;
  998.             } else if (g == 9972) {
  999.                 l2 = 2;
  1000.             } else if (g == 9973) {
  1001.                 l2 = 1;
  1002.             } else if (g == 9977) {
  1003.                 l2 = 2;
  1004.             } else if (g == 9979) {
  1005.                 l2 = 1;
  1006.             } else if (g == 9981) {
  1007.                 l2 = 2;
  1008.             } else if (g == 9985) {
  1009.                 l2 = 1;
  1010.             } else if (g == 9986) {
  1011.                 l2 = 2;
  1012.             } else if (g == 9988) {
  1013.                 l2 = 1;
  1014.             } else if (g == 99910) {
  1015.                 if (v < 3000) {
  1016.                     l2 = 1;
  1017.                 } else if (v < 9000) {
  1018.                     l2 = 2;
  1019.                 } else {
  1020.                     l2 = 3;
  1021.                 }
  1022.             } else if (g == 99912) {
  1023.                 if (v < 4000) {
  1024.                     l2 = 2;
  1025.                 } else if (v < 6000) {
  1026.                     l2 = 1;
  1027.                 } else if (v < 9000) {
  1028.                     l2 = 2;
  1029.                 } else {
  1030.                     l2 = 3;
  1031.                 }
  1032.             } else if (g == 99913) {
  1033.                 if (v < 3000) {
  1034.                     l2 = 1;
  1035.                 } else if (v < 5910) {
  1036.                     l2 = 2;
  1037.                 } else {
  1038.                     l2 = 3;
  1039.                 }
  1040.             } else if (g == 99914) {
  1041.                 if (v < 5000) {
  1042.                     l2 = 1;
  1043.                 } else if (v < 9000) {
  1044.                     l2 = 2;
  1045.                 } else {
  1046.                     l2 = 3;
  1047.                 }
  1048.             } else if (g == 99915) {
  1049.                 if (v < 5000) {
  1050.                     l2 = 1;
  1051.                 } else if (v < 8000) {
  1052.                     l2 = 2;
  1053.                 } else {
  1054.                     l2 = 3;
  1055.                 }
  1056.             } else if (g == 99916) {
  1057.                 if (v < 3000) {
  1058.                     l2 = 1;
  1059.                 } else if (v < 7000) {
  1060.                     l2 = 2;
  1061.                 } else {
  1062.                     l2 = 3;
  1063.                 }
  1064.             } else if (g == 99917) {
  1065.                 if (v < 3000) {
  1066.                     l2 = 1;
  1067.                 } else if (v < 9000) {
  1068.                     l2 = 2;
  1069.                 } else {
  1070.                     l2 = 3;
  1071.                 }
  1072.             } else if (g == 99918) {
  1073.                 if (v < 4000) {
  1074.                     l2 = 1;
  1075.                 } else if (v < 8000) {
  1076.                     l2 = 2;
  1077.                 } else {
  1078.                     l2 = 3;
  1079.                 }
  1080.             } else if (g == 99919) {
  1081.                 if (v < 4000) {
  1082.                     l2 = 1;
  1083.                 } else if (v < 8910) {
  1084.                     l2 = 2;
  1085.                 } else {
  1086.                     l2 = 3;
  1087.                 }
  1088.             } else if (g == 99920) {
  1089.                 if (v < 5000) {
  1090.                     l2 = 1;
  1091.                 } else if (v < 9000) {
  1092.                     l2 = 2;
  1093.                 } else {
  1094.                     l2 = 3;
  1095.                 }
  1096.             } else if (g == 99921) {
  1097.                 if (v < 2000) {
  1098.                     l2 = 1;
  1099.                 } else if (v < 7000) {
  1100.                     l2 = 2;
  1101.                 } else if (v < 8000) {
  1102.                     l2 = 0;
  1103.                 } else if (v < 9000) {
  1104.                     l2 = 1;
  1105.                 } else {
  1106.                     l2 = 2;
  1107.                 }
  1108.             } else if (g == 99922) {
  1109.                 if (v < 4000) {
  1110.                     l2 = 1;
  1111.                 } else if (v < 7000) {
  1112.                     l2 = 2;
  1113.                 } else {
  1114.                     l2 = 3;
  1115.                 }
  1116.             } else if (g == 99923) {
  1117.                 if (v < 2000) {
  1118.                     l2 = 1;
  1119.                 } else if (v < 8000) {
  1120.                     l2 = 2;
  1121.                 } else {
  1122.                     l2 = 3;
  1123.                 }
  1124.             } else if (g == 99924) {
  1125.                 if (v < 3000) {
  1126.                     l2 = 1;
  1127.                 } else if (v < 8000) {
  1128.                     l2 = 2;
  1129.                 } else {
  1130.                     l2 = 3;
  1131.                 }
  1132.             } else if (g == 99925) {
  1133.                 if (v < 4000) {
  1134.                     l2 = 1;
  1135.                 } else if (v < 8000) {
  1136.                     l2 = 2;
  1137.                 } else {
  1138.                     l2 = 3;
  1139.                 }
  1140.             } else if (g == 99926) {
  1141.                 if (v < 1000) {
  1142.                     l2 = 1;
  1143.                 } else if (v < 6000) {
  1144.                     l2 = 2;
  1145.                 } else {
  1146.                     l2 = 3;
  1147.                 }
  1148.             } else if (g == 99927) {
  1149.                 if (v < 3000) {
  1150.                     l2 = 1;
  1151.                 } else if (v < 6000) {
  1152.                     l2 = 2;
  1153.                 } else {
  1154.                     l2 = 3;
  1155.                 }
  1156.             } else if (g == 99928) {
  1157.                 if (v < 1000) {
  1158.                     l2 = 1;
  1159.                 } else if (v < 8000) {
  1160.                     l2 = 2;
  1161.                 } else {
  1162.                     l2 = 3;
  1163.                 }
  1164.             } else if (g == 99929) {
  1165.                 if (v < 5000) {
  1166.                     l2 = 1;
  1167.                 } else if (v < 8000) {
  1168.                     l2 = 2;
  1169.                 } else {
  1170.                     l2 = 3;
  1171.                 }
  1172.             } else if (g == 99930) {
  1173.                 if (v < 5000) {
  1174.                     l2 = 1;
  1175.                 } else if (v < 8000) {
  1176.                     l2 = 2;
  1177.                 } else {
  1178.                     l2 = 3;
  1179.                 }
  1180.             } else if (g == 99931) {
  1181.                 if (v < 5000) {
  1182.                     l2 = 1;
  1183.                 } else if (v < 8000) {
  1184.                     l2 = 2;
  1185.                 } else {
  1186.                     l2 = 3;
  1187.                 }
  1188.             } else if (g == 99932) {
  1189.                 if (v < 1000) {
  1190.                     l2 = 1;
  1191.                 } else if (v < 6000) {
  1192.                     l2 = 2;
  1193.                 } else if (v < 7000) {
  1194.                     l2 = 0;
  1195.                 } else if (v < 8000) {
  1196.                     l2 = 1;
  1197.                 } else {
  1198.                     l2 = 2;
  1199.                 }
  1200.             } else if (g == 99933) {
  1201.                 if (v < 3000) {
  1202.                     l2 = 1;
  1203.                 } else if (v < 6000) {
  1204.                     l2 = 2;
  1205.                 } else {
  1206.                     l2 = 3;
  1207.                 }
  1208.             } else if (g == 99934) {
  1209.                 if (v < 2000) {
  1210.                     l2 = 1;
  1211.                 } else if (v < 8000) {
  1212.                     l2 = 2;
  1213.                 } else {
  1214.                     l2 = 3;
  1215.                 }
  1216.             } else if (g == 99935) {
  1217.                 if (v < 3000) {
  1218.                     l2 = 1;
  1219.                 } else if (v < 6000) {
  1220.                     l2 = 2;
  1221.                 } else if (v < 7000) {
  1222.                     l2 = 0;
  1223.                 } else if (v < 9000) {
  1224.                     l2 = 1;
  1225.                 } else {
  1226.                     l2 = 2;
  1227.                 }
  1228.             } else if (g == 99936) {
  1229.                 if (v < 1000) {
  1230.                     l2 = 1;
  1231.                 } else if (v < 6000) {
  1232.                     l2 = 2;
  1233.                 } else {
  1234.                     l2 = 3;
  1235.                 }
  1236.             } else if (g == 99937) {
  1237.                 if (v < 2000) {
  1238.                     l2 = 1;
  1239.                 } else if (v < 6000) {
  1240.                     l2 = 2;
  1241.                 } else {
  1242.                     l2 = 3;
  1243.                 }
  1244.             } else if (g == 99938) {
  1245.                 if (v < 2000) {
  1246.                     l2 = 1;
  1247.                 } else if (v < 6000) {
  1248.                     l2 = 2;
  1249.                 } else if (v < 9000) {
  1250.                     l2 = 1;
  1251.                 } else {
  1252.                     l2 = 2;
  1253.                 }
  1254.             } else if (g == 99939) {
  1255.                 if (v < 6000) {
  1256.                     l2 = 1;
  1257.                 } else if (v < 9000) {
  1258.                     l2 = 2;
  1259.                 } else {
  1260.                     l2 = 3;
  1261.                 }
  1262.             } else if (g == 99940) {
  1263.                 if (v < 1000) {
  1264.                     l2 = 1;
  1265.                 } else if (v < 7000) {
  1266.                     l2 = 2;
  1267.                 } else {
  1268.                     l2 = 3;
  1269.                 }
  1270.             } else if (g == 99941) {
  1271.                 if (v < 3000) {
  1272.                     l2 = 1;
  1273.                 } else if (v < 8000) {
  1274.                     l2 = 2;
  1275.                 } else {
  1276.                     l2 = 3;
  1277.                 }
  1278.             } else if (g == 99942) {
  1279.                 if (v < 5000) {
  1280.                     l2 = 1;
  1281.                 } else if (v < 8000) {
  1282.                     l2 = 2;
  1283.                 } else {
  1284.                     l2 = 3;
  1285.                 }
  1286.             } else if (g == 99943) {
  1287.                 if (v < 3000) {
  1288.                     l2 = 1;
  1289.                 } else if (v < 6000) {
  1290.                     l2 = 2;
  1291.                 } else {
  1292.                     l2 = 3;
  1293.                 }
  1294.             } else if (g == 99944) {
  1295.                 if (v < 5000) {
  1296.                     l2 = 1;
  1297.                 } else if (v < 8000) {
  1298.                     l2 = 2;
  1299.                 } else {
  1300.                     l2 = 3;
  1301.                 }
  1302.             } else if (g == 99945) {
  1303.                 if (v < 6000) {
  1304.                     l2 = 1;
  1305.                 } else if (v < 9000) {
  1306.                     l2 = 2;
  1307.                 } else {
  1308.                     l2 = 3;
  1309.                 }
  1310.             } else if (g == 99946) {
  1311.                 if (v < 3000) {
  1312.                     l2 = 1;
  1313.                 } else if (v < 6000) {
  1314.                     l2 = 2;
  1315.                 } else {
  1316.                     l2 = 3;
  1317.                 }
  1318.             } else if (g == 99947) {
  1319.                 if (v < 3000) {
  1320.                     l2 = 1;
  1321.                 } else if (v < 7000) {
  1322.                     l2 = 2;
  1323.                 } else {
  1324.                     l2 = 3;
  1325.                 }
  1326.             } else if (g == 99948) {
  1327.                 if (v < 5000) {
  1328.                     l2 = 1;
  1329.                 } else if (v < 8000) {
  1330.                     l2 = 2;
  1331.                 } else {
  1332.                     l2 = 3;
  1333.                 }
  1334.             } else if (g == 99949) {
  1335.                 if (v < 2000) {
  1336.                     l2 = 1;
  1337.                 } else if (v < 9000) {
  1338.                     l2 = 2;
  1339.                 } else {
  1340.                     l2 = 3;
  1341.                 }
  1342.             } else if (g == 99950) {
  1343.                 if (v < 5000) {
  1344.                     l2 = 1;
  1345.                 } else if (v < 8000) {
  1346.                     l2 = 2;
  1347.                 } else {
  1348.                     l2 = 3;
  1349.                 }
  1350.             } else if (g == 99952) {
  1351.                 if (v < 5000) {
  1352.                     l2 = 1;
  1353.                 } else if (v < 8000) {
  1354.                     l2 = 2;
  1355.                 } else {
  1356.                     l2 = 3;
  1357.                 }
  1358.             } else if (g == 99953) {
  1359.                 if (v < 3000) {
  1360.                     l2 = 1;
  1361.                 } else if (v < 8000) {
  1362.                     l2 = 2;
  1363.                 } else {
  1364.                     l2 = 3;
  1365.                 }
  1366.             } else if (g == 99954) {
  1367.                 if (v < 3000) {
  1368.                     l2 = 1;
  1369.                 } else if (v < 7000) {
  1370.                     l2 = 2;
  1371.                 } else {
  1372.                     l2 = 3;
  1373.                 }
  1374.             } else if (g == 99955) {
  1375.                 if (v < 2000) {
  1376.                     l2 = 1;
  1377.                 } else if (v < 6000) {
  1378.                     l2 = 2;
  1379.                 } else if (v < 9000) {
  1380.                     l2 = 1;
  1381.                 } else {
  1382.                     l2 = 2;
  1383.                 }
  1384.             } else if (g == 99956) {
  1385.                 if (v < 6000) {
  1386.                     l2 = 2;
  1387.                 } else {
  1388.                     l2 = 3;
  1389.                 }
  1390.             } else {
  1391.                 throw new NotImplementedException("Not defined.");
  1392.             }
  1393.  
  1394.             if (l2 == 0) {
  1395.                 throw new NotImplementedException("Not defined.");
  1396.             }
  1397.             string g2 = n.Substring(0, l2);
  1398.             string g3 = n.Substring(l2);
  1399.             StringBuilder stringBuilder = new StringBuilder();
  1400.             if (isbnPrefix) {
  1401.                 stringBuilder.Append("ISBN ");
  1402.             }
  1403.             if (p != null) {
  1404.                 stringBuilder.Append(p + "-");
  1405.             }
  1406.             stringBuilder.Append(g1 + "-" + g2 + "-" + g3 + "-" + c);
  1407.             return stringBuilder.ToString();
  1408.         }
  1409.  
  1410.         public static bool TestIssnStrict(string issn) {
  1411.             if (!Regex.IsMatch(issn, @"^ISSN\s\d{4}-\d{3}(\d|X)$")) {
  1412.                 return false;
  1413.             }
  1414.             return TestRawIssn(RawIssn(issn));
  1415.         }
  1416.  
  1417.         public static bool TestIssnBasic(string issn) {
  1418.             return TestRawIssn(RawIssn(issn));
  1419.         }
  1420.  
  1421.         public static bool TestRawIssn(string issn) {
  1422.             int n = 0;
  1423.             if (issn.Length == 8) {
  1424.                 for (int i = 0; i < 8; i++) {
  1425.                     n += (issn[i] == 'X' ? 10 : int.Parse(issn[i].ToString())) * (8 - i);
  1426.                 }
  1427.                 return n % 11 == 0;
  1428.             } else {
  1429.                 return false;
  1430.             }
  1431.         }
  1432.  
  1433.         public static string RawIssn(string issn) {
  1434.             if (!Regex.IsMatch(issn, @"^\s*(ISSN\s+)?\d{4}(-|\s+)?\d{3}(\d|X)\s*$", RegexOptions.IgnoreCase)) {
  1435.                 throw new ArgumentException("Invalid ISSN.");
  1436.             }
  1437.             Regex regex = new Regex(@"^\s*(ISSN\s+)?(\d{4})(-|\s+)?(\d{3}(\d|X))\s*$", RegexOptions.IgnoreCase);
  1438.             issn = regex.Replace(issn, "$2$4");
  1439.             if (issn.Length != 8) {
  1440.                 throw new ArgumentException("Invalid ISSN.");
  1441.             }
  1442.             return issn.ToUpper();
  1443.         }
  1444.  
  1445.         public static string FormatIssn(string issn, bool issnPrefix) {
  1446.             return issnPrefix ? "ISSN " + FormatIssn(issn) : FormatIssn(issn);
  1447.         }
  1448.  
  1449.         public static string FormatIssn(string issn) {
  1450.             issn = RawIssn(issn);
  1451.             return issn.Substring(0, 4) + "-" + issn.Substring(4, 4);
  1452.         }
  1453.     }
  1454. }
  1455.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement