--9/eUdp+dLtKXvemk Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Jun 25, 2008 at 09:07:46AM +0530, Mohit Mahajan (Lists) wrote: > Hello, > > We manufacture a lot of different kinds of instruments (but each in > small quantities). Our serial numbering scheme so far is pretty basic: > ABCD-EFGH. AB tells us the week and CD the last two digits of the year. > EFGH starts at 0000 every year in January, and increases count with each > instrument manufactured. It gives no indication which model or what was > manufactured. This info would be given by a spreadsheet where the > description of the instrument is entered next to the serial number. So > we'd have to look up the serial number in this sheet to know what > instrument we're talking about. > > I'd like suggestions for a serial number scheme that could indicate the > instrument model/type, date of manufacture (for warranty purposes). And > it shouldn't be too long, about 8-10 characters. > > It would be great to know what schemes members here or their companies > use to number their products. My serial numbering scheme is to simply assign randomly created 64-bit numbers and store all the associated metadata in a database... Not exactly a scheme for everyone! Tangentially though is a scheme I've come up with for actually applying the serial numbers to the pcb. For a recent batch of stuff I got a 8.5x11 sheet of custom letraset made up by All Out Graphics in Vancouver, BC with a bunch of randomly selected serial numbers in Courier and Helvetica in a variety of font sizes; attached is a python script to do this. The letraset is then applied to the PCB and protected with a thin coat of MGChemicals acrylic spray encapsulant. Aesthetically it's very nice and professional looking and the same technique could probably be applied equally well as a silkscreening alternative, indeed, most of the custom letraset business from my understanding is for design firms that want to mockup stuff like drink containers without paying for an expensive silkscreening run. Total cost for the sheet was about $80 with shipping, of which $30 or so was the setup fee, which unfortunately can't be amortized for serial numbers... -- http://petertodd.org 'peter'[:-1]@petertodd.org --9/eUdp+dLtKXvemk Content-Type: image/jpeg Content-Disposition: attachment; filename="serial-num.jpg" Content-Transfer-Encoding: base64 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 CQwLCw0QGhEQDw8QIBcYExomIigoJiIlJCowPTMqLTkuJCU1SDU5P0FERUQpM0tQSkJPPUNE Qf/bAEMBCwwMEA4QHxERH0EsJSxBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQf/AABEIADUAngMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAA AAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEU MoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFla Y2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAA AAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIy gQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrC w8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOe4FakW kW8tjbzm8WF5Ms4k6BQcZX1PtWUcVanuxLb20QXHkAgnPXJzUNN7Fq3Uk1DTzBeTQ2ySzRxB Tu25IBAPOOnWlmsnTTra7wSZ5GTaMdgMcde5rUtvEcSCTMLoS4dWUBjkKBzn6VW0/V4rVrdp IWYwySMCMdHAB49RgYqE59h+6ZbRSq/ltG+/+6V5FSQW7y3cVsfkZ2C/MOma1ZtdH2szQtIB 9naFSF2nJzg9T0JzWbBctHexXUhMjI4Y7jknHvVJt7idi0bS0luXgt5ZsxpIzNIo52qTwAe+ KojIXdg49cVfjuLCC9M8UlxIsqyI4aMAqGUjjnnGfarLarbmx8rfMR5KxC3Kjy1Ix82c9eM9 OppJtD0M6xtjeXkNvuKeY2N2M4qJ1aIlXRkbuGGDW3/bES6jDd/bLmSJJfMFsUwsY9Bzjjp0 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 BCEIAQhCAEIQgBCEIAQhCA//2Q== --9/eUdp+dLtKXvemk Content-Type: text/x-python; charset=us-ascii Content-Disposition: attachment; filename="new_sheet.py" #!/usr/bin/python import sys from reportlab.lib import colors from reportlab.lib.units import inch from reportlab.lib.pagesizes import landscape,LETTER from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import SimpleDocTemplate,Paragraph,Table styles = getSampleStyleSheet() doc = SimpleDocTemplate(sys.argv[1],pagesize=LETTER) elements = [] num_rows = 4 num_cols = 4 fonts = ('Helvetica','Courier') sizes = ('8.0','9.0','10.0','12.0','14.0') rows = [] for font in fonts: for size in sizes: for y in range(num_rows): row = [] for x in range(num_cols): import random t = '%0.16x' % (font,size,random.randint(0,2**64-1)) row.append(Paragraph(t,styles['Normal'])) rows.append(row) t = Table(rows) elements.append(t) doc.leftMargin = 0.2 * inch doc.rightMargin = 0.2 * inch doc.topMargin = 0.2 * inch doc.bottomMargin = 0.2 * inch doc.build(elements) --9/eUdp+dLtKXvemk Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist --9/eUdp+dLtKXvemk--