<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI Emoji";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">Alex, Mark,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks for this! We use 14 character barcodes, so I think for now our best immediate approach will be to modify our config.rb file so that the min and max values are both set to 14. That will at least keep us
 from going forward with entries that are the wrong length (we do have those, and they stand out pretty clearly in a list).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Mark, we just have the same Codabar (I think) labels that the rest of the library uses, like for books and such, for which we can use Mod 10 (Luhn algorithm) to determine the check digit. So yes, that XSLT process
 would be useful! <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">James Bullen at Hudson Molonglo also sent along this, as a proof of concept plugin for the same verification algorithm (thanks James!):</span><o:p></o:p></p>
<p class="MsoNormal"><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_jambun_as-5Fbarcode-5Fvalidator-5Fpoc&d=DwMFaQ&c=yHlS04HhBraes5BQ9ueu5zKhE7rtNXt_d012z2PA6ws&r=fciHLC2ou0tXKp-JlPlsrEmslFw9tnR331DgXAhVLvo&m=vpyLOy3MnEb8EotnwIi_UMxBZzWZ670VSRacI00SSEg&s=5ypZGTRWLz3_1uvMH6IfQpbedcpu-kr8TMpNBwylQLQ&e=">https://github.com/jambun/as_barcode_validator_poc</a><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">I’m not a programmer, but this may be something we can try out on our local sandbox.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">--Benn<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> archivesspace_users_group-bounces@lyralists.lyrasis.org <archivesspace_users_group-bounces@lyralists.lyrasis.org>
<b>On Behalf Of </b>Custer, Mark<br>
<b>Sent:</b> Monday, June 24, 2019 10:44 AM<br>
<b>To:</b> Archivesspace Users Group <archivesspace_users_group@lyralists.lyrasis.org><br>
<b>Subject:</b> Re: [Archivesspace_Users_Group] barcode validation for ASpace<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Benn,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Alex is exactly right.  <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">At Yale, we use the length configuration to help ensure a basic level of validity (one of our repositories has 9 character barcodes, and the rest have 14 character barcodes).  I can also add that during the development of the top container
 module, I was hopeful that we might be able to include the ability to validate check digits for a few different barcoding systems as additional configuration options.  It was decided not to pursue that option at the time, but I imagine that such a thing could
 definitely be handled in a plugin. I’m not entirely sure how it would be handled throughout the application, but I expect that it could be baked into the JSON and database schemas.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I wrote a process in XSLT to verify barcode check digits according to the Luhn algorithm (<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__en.wikipedia.org_wiki_Luhn-5Falgorithm&d=DwMGaQ&c=yHlS04HhBraes5BQ9ueu5zKhE7rtNXt_d012z2PA6ws&r=fciHLC2ou0tXKp-JlPlsrEmslFw9tnR331DgXAhVLvo&m=qyMJ0RQYnXnKZjg_URtn9-zzr0wjmj_UEmHV1bPi1Fg&s=QoU9rYm4RpRGlDbooUlUvZHG-XEpuQxwkonRgxC4E9Y&e=">https://en.wikipedia.org/wiki/Luhn_algorithm</a>),
 if that would be of interest.  What types of barcodes do you use?  I had been meaning to add the barcode-digit check to our EAD validation process at some point anyway, so this is a good reminder to do that
<span style="font-family:"Segoe UI Emoji",sans-serif">😊</span>.  So far, I have just been using that check during a project to reconcile item records in our ILS with top container records in ArchivesSpace.  In each case, I’ve stumbled across a handful of barcodes
 with invalid check digits, so you’re right that those errors definitely will creep in when left unchecked.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Mark<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>From:</b> <a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org">
archivesspace_users_group-bounces@lyralists.lyrasis.org</a> [<a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org">mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org</a>]
<b>On Behalf Of </b>Alexander Duryee<br>
<b>Sent:</b> Monday, 24 June, 2019 10:22 AM<br>
<b>To:</b> Archivesspace Users Group <<a href="mailto:archivesspace_users_group@lyralists.lyrasis.org">archivesspace_users_group@lyralists.lyrasis.org</a>><br>
<b>Subject:</b> Re: [Archivesspace_Users_Group] barcode validation for ASpace<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">Benn,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">It's possible to validate barcodes for length via ASpace by modifying config.rb (ref.
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__nam05.safelinks.protection.outlook.com_-3Furl-3Dhttps-253A-252F-252Fgithub.com-252Farchivesspace-252Farchivesspace-252Fblob-252Fmaster-252Fdocs-252Fuser-252Fconfiguring-2Darchivesspace.md-26data-3D02-257C01-257Cmark.custer-2540yale.edu-257C3c207da319d44f12d2e608d6f8af5bbc-257Cdd8cbebb21394df8b4114e3e87abeb5c-257C0-257C0-257C636969829396148931-26sdata-3D7a4EoOyA3sfChlyeoaqLZbYgMyPDzXF9k7hQKrnIaQA-253D-26reserved-3D0&d=DwMGaQ&c=yHlS04HhBraes5BQ9ueu5zKhE7rtNXt_d012z2PA6ws&r=fciHLC2ou0tXKp-JlPlsrEmslFw9tnR331DgXAhVLvo&m=qyMJ0RQYnXnKZjg_URtn9-zzr0wjmj_UEmHV1bPi1Fg&s=rmJ5ttEdQwzwsYY4_RWMmhbAJqjtJc39J9RerXdGsyI&e=">
https://github.com/archivesspace/archivesspace/blob/master/docs/user/configuring-archivesspace.md</a>).  If the min and max values are set to the same length, then barcodes will only validate if they're either 0 or that exact length.  You won't need to do anything
 elaborate to implement this - just add the correct values to config.rb and restart ASpace, and it'll immediately go into effect.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I'm not aware of anything in ASpace that will do more elaborate validation (e.g. verifying that a barcode's check digits are correct); this would likely require either a plugin or feature request.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">--Alex<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Fri, Jun 21, 2019 at 1:39 PM Benn Joseph <<a href="mailto:benn.joseph@northwestern.edu">benn.joseph@northwestern.edu</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Good afternoon,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Over the past few years, our standard procedure when processing a new collection has been to barcode the finished boxes and assign those barcodes to
 their Top Containers in ASpace. </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">ArchivesSpace does a great job of keeping a user from assigning a barcode that has already been assigned elsewhere--which we recently discovered after
 mistakenly being given a sheet of piggyback barcodes that had already been assigned to various other collections. The system reports an error: “Barcode – A barcode must be unique within a repository”. Great!</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">One thing it doesn’t do is check for valid barcodes against a schema. For instance, we try to be very careful about only using barcode scanners to enter
 barcodes into ArchivesSpace, but every now and then one will get entered by hand, or there will be an accidental keystroke after scanning. In those cases, it would be ideal if ASpace were able to validate this number to ensure that it’s correct (I understand
 that Alma does this using a Codabar 13 validation routine, though there are other validation options that would also look for a check digit). Would this be a plugin? A feature request? Would it even be possible?
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">The reason it’s important for us to ensure barcode accuracy is that a large volume of our collections get sent offsite to a facility that uses GFA as
 their inventory system. So, if we enter the barcode for a box that is incorrect in ASpace and GFA records it differently, it ends up being very difficult to recall that box if a researcher requests it.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Thanks!</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">--Benn</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:#0D0D0D">Benn Joseph</span></b><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:#0D0D0D">Head of Archival Processing</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:#0D0D0D">Northwestern University Libraries</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:#4E2A84">Northwestern University</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__nam05.safelinks.protection.outlook.com_-3Furl-3Dhttp-253A-252F-252Fwww.library.northwestern.edu-26data-3D02-257C01-257Cmark.custer-2540yale.edu-257C3c207da319d44f12d2e608d6f8af5bbc-257Cdd8cbebb21394df8b4114e3e87abeb5c-257C0-257C0-257C636969829396158926-26sdata-3DC9sj3YAaZjki5ritzmUdBTYMN1ncT7rvMA7B7LRotYI-253D-26reserved-3D0&d=DwMGaQ&c=yHlS04HhBraes5BQ9ueu5zKhE7rtNXt_d012z2PA6ws&r=fciHLC2ou0tXKp-JlPlsrEmslFw9tnR331DgXAhVLvo&m=qyMJ0RQYnXnKZjg_URtn9-zzr0wjmj_UEmHV1bPi1Fg&s=eLhr2rx_eg4Vr1fe4MlQ-96VuFYR-qd5KAWJ1xMzqLM&e=" target="_blank"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:windowtext">www.library.northwestern.edu</span></a><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a href="mailto:benn.joseph@northwestern.edu%0d" target="_blank"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:windowtext">benn.joseph@northwestern.edu</span></a><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:#0D0D0D">847.467.6581</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
Archivesspace_Users_Group mailing list<br>
<a href="mailto:Archivesspace_Users_Group@lyralists.lyrasis.org" target="_blank">Archivesspace_Users_Group@lyralists.lyrasis.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__nam05.safelinks.protection.outlook.com_-3Furl-3Dhttp-253A-252F-252Flyralists.lyrasis.org-252Fmailman-252Flistinfo-252Farchivesspace-5Fusers-5Fgroup-26data-3D02-257C01-257Cmark.custer-2540yale.edu-257C3c207da319d44f12d2e608d6f8af5bbc-257Cdd8cbebb21394df8b4114e3e87abeb5c-257C0-257C0-257C636969829396158926-26sdata-3DkUMdoCxPj3F3zc3QIfInjShvGGAW-252BZA-252Fe438NVHZJLw-253D-26reserved-3D0&d=DwMGaQ&c=yHlS04HhBraes5BQ9ueu5zKhE7rtNXt_d012z2PA6ws&r=fciHLC2ou0tXKp-JlPlsrEmslFw9tnR331DgXAhVLvo&m=qyMJ0RQYnXnKZjg_URtn9-zzr0wjmj_UEmHV1bPi1Fg&s=tah25MMdScA3QiwLjqD6j5RV74xOE7A8Bogj4IgMJkQ&e=" target="_blank">http://lyralists.lyrasis.org/mailman/listinfo/archivesspace_users_group</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<br>
-- <o:p></o:p></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Alexander Duryee<o:p></o:p></p>
<div>
<p class="MsoNormal">Metadata Archivist<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">New York Public Library<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">(917)-229-9590<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="mailto:alexanderduryee@nypl.org" target="_blank">alexanderduryee@nypl.org</a><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>