Skip to content

Instantly share code, notes, and snippets.

@ChMat
Created May 15, 2019 12:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ChMat/12f858f778d8d3b474e2804d3e9ca4e4 to your computer and use it in GitHub Desktop.
Save ChMat/12f858f778d8d3b474e2804d3e9ca4e4 to your computer and use it in GitHub Desktop.
iButton Serial Number Formatter
<?php
class iButton {
/**
* Convertit le format du numéro de série iButton dans un format acceptable pour Loxone
*
* Input : ABCDEFGHIJKLMNOP
* Output : OP.MN.KL.IJ.GH.EF.CD.AB
*
* @param String $serialNumber
*
* @return String
* @throws Exception
*/
public static function convert(String $serialNumber): String
{
$length = strlen($serialNumber);
if ($length % 2 != 0) {
throw new \Exception(sprintf('Wrong format: serialNumber should have an even string length. Length = %d (serialNumber: %s)', $length, $serialNumber));
}
$return = '';
for($i = $length - 2; $i >= 0; $i = $i - 2) {
$return .= substr($serialNumber, $i, 2);
$return .= ($i > 0) ? '.' : '';
}
return $return;
}
}
$serialNumber = $_POST['serialNumber'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Formatter un numéro de série iButton</title>
<meta charset="utf-8">
<style type="text/css">
body {
font-family: Arial, Verdana, sans-serif;
}
label {
display: inline-block;
width: 300px;
}
input[type=text] {
width: 200px;
}
textarea {
display: inline-block;
width: 400px;
height: 100px;
}
</style>
</head>
<body>
<form method="post" autocomplete="false">
<p>
<input type="text" id="serialNumber" name="serialNumber" placeholder="Numéro de série" value="<?php echo (isset($serialNumber)) ? $serialNumber : '' ?>" required="required">
</p>
<p>
<input type="submit" value="Formater">
</p>
<input type="text" id="serialNumberFormatted" name="serialNumberFormatted" placeholder="Numéro de série formaté" value="<?php echo (isset($serialNumber)) ? iButton::convert($serialNumber) : '' ?>">
</p>
</form>
<p>
</p>
<script type="text/javascript">
document.getElementById('serialNumber').select();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment