<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 26, 2014 at 12:15 PM, Denis McMahon <span dir="ltr"><<a href="mailto:denismfmcmahon@gmail.com" target="_blank">denismfmcmahon@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div id=":1vp" class="" style="overflow:hidden">Note, I think the 1981 model year ran KCA - DCA prefixes, not as shown on<br>
the website you quoted.</div></blockquote></div><br><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">​Denis,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Regarding the <span style="font-family:arial,sans-serif">KCA - DCA prefixes, d</span>o you have a source as to why you think this?</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Here is what I have so far with a simple test at the end. I don't show is a dict which contains more information about the year/model, its not relivant. I am happy with how it is working, I hope to be able to decode BSA, and other British or more generally vintage motorcycle frame and engine numbers. BSA looks like a mess.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style><font face="verdana, sans-serif">def vin_to_year2(vin):</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    vin = vin.lower()</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    alpha_digit_alpha = re.match(r'^(\D+)(\d+)(\D+)$', vin)</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    digit_alpha = re.match(r'^(\d+)(\D+)$', vin)</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    alpha_digit = re.match(r'^(\D+)+(\d+)$', vin)</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    alpha = re.match(r'^(\d+)$', vin)</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    </font></div><div class="gmail_default" style><font face="verdana, sans-serif">    if alpha_digit_alpha:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        alpha_digit_alpha.groups()</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    elif digit_alpha:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        g = digit_alpha.groups()</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        if 100<=int(g[0]) and g[-1]=='n':             # Triumph 1950: From 100N</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1950'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 101<=int(g[0])<=15808 and g[-1]=='na':   # Triumph 1951: 101NA - 15808NA</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1951'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 15809<=int(g[0])<=25000 and g[-1]=='na': # Triumph 1952: 15809NA - 25000NA, see also alpha only vin for 1952</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            # Triumph 1952: 15809NA - 25000NA</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1952'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        else:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return None</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    elif alpha_digit:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        g = alpha_digit.groups()</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        if g[0] == 'h' and 101 <= int(g[1]) <= 760:       # tu1957: H101 - H760</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1957'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 761 <= int(g[1]) <= 5484:    # tu1958: H761 - H5484</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1958'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 5485 <= int(g[1]) <= 11511:  # tu1959: H5485 - H11511</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1959'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 11512 <= int(g[1]) <= 18611: # tu1960: H11512 - H18611</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1960'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 18612 <= int(g[1]) <= 25251: # tu1961: H18612 - H25251</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1961'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 25252 <= int(g[1]) <= 29732: # tu1962: H25252 - H29732</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1962'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 29733 <= int(g[1]) <= 32464: # tu1963: H29733 - H32464</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1963'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 32465 <= int(g[1]) <= 35986: # tu1964: H32465 - H35986</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1964'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 35987 <= int(g[1]) <= 40527: # tu1965: H35987 - H40527</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1965'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 40528 <= int(g[1]) <= 49832: # tu1966: H40528 - H49832</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1966'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 49833 <= int(g[1]) <= 57082: # tu1967: H49833 - H57082</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1967'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 57083 <= int(g[1]) <= 65572: # tu1968: H57083 - H65572</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1968'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'h' and 65573 <= int(g[1]) <= 67331: # tu1969: H65573 - H67331</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tu1969'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'd' and 101 <= int(g[1]) <= 7726: # tp1960: D101 - D7726</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1960'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'd' and 7727 <= int(g[1]) <= 15788: # tp1961: D7727 - D15788</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1961'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'd' and 15789 <= int(g[1]): # tp1962: D15789 - onward</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1962'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 101 <= int(g[1]) <= 5824: # 650 t65u1963: DU101 - DU5824</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1963'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 5825 <= int(g[1]) <= 13374: # 650 t65u1964: DU5825 - DU13374</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1964'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 5825 <= int(g[1]) <= 13374: # 650 t65u1965: DU5825 - DU13374</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1965'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 24875 <= int(g[1]) <= 44393: # 650 t65u1966: DU24875 - DU44393</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1966'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 44394 <= int(g[1]) <= 66245: # 650 t65u1967: DU44394 - DU66245</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1967'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 66246 <= int(g[1]) <= 85903: # 650 t65u1968: DU66246 - DU85903</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1968'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0] == 'du' and 85904 <= int(g[1]) <= 90282: # 650 t65u1969: DU85904 - DU90282</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't65u1969'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        else:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return None</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    elif alpha:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        g = alpha.groups()</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        if 25000 <= int(g[0]) <= 32302:   # t1952: 25000 - 32302</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1952'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 32303 <= int(g[0]) <= 44134: # t1953: 32303 - 44134</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1953'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 44135 <= int(g[0]) <= 56699: # t1954: 44135 - 56699</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1954'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 56700 <= int(g[0]) <= 70929: # t1955: 56700 - 70929</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1955'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 70930 <= int(g[0]) <= 82799: # t1956: 70930 - 82799</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1956'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif 100 <= int(g[0]) <= 944 and g[0][0]=='0': # t1956: 0100 - 0944</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 't1956'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0][0] == '0' and 945 <= int(g[0]) <= 11115: # tp1957: 0945 - 011115</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1957'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0][0] == '0' and 11116 <= int(g[0]) <= 20075: # tp1958: 011116 - 020075</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1958'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0][0] == '0' and 20076 <= int(g[0]) <= 29363: # tp1959: 020076 - 029363</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1959'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        elif g[0][0] == '0' and 29364 <= int(g[0]) <= 30424: # tp1960: 029364 - 030424</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return 'tp1960'</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        else:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">            return None     </font></div><div class="gmail_default" style><font face="verdana, sans-serif">    else:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">        return None</font></div><div class="gmail_default" style><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><font face="verdana, sans-serif">vin_test_list = ['101n', '500n', '234na', '15809NA', '25000', '32303', '44135', '56700', '70930', '0100', 'H11512', 'D15789', 'DU101']</font></div><div class="gmail_default" style><font face="verdana, sans-serif">for vin in vin_test_list:</font></div><div class="gmail_default" style><font face="verdana, sans-serif">    print(vin_to_year2(vin))</font></div><br><br clear="all"><div><div class="gmail_signature"><div>Vincent Davis</div><div>720-301-3003<span></span><span></span></div></div></div>
</div></div>